[vdr-plugin-skinnopacity] 01/03: Imported Upstream version 1.1.3
Tobias Grimm
tiber-guest at moszumanska.debian.org
Tue Feb 10 18:07:27 UTC 2015
This is an automated email from the git hooks/post-receive script.
tiber-guest pushed a commit to branch master
in repository vdr-plugin-skinnopacity.
commit 1abe8bb668ca60566d7a73c42b70445acb125199
Author: etobi <git at e-tobi.net>
Date: Tue Feb 10 19:03:02 2015 +0100
Imported Upstream version 1.1.3
---
HISTORY | 248 +++++
Makefile | 24 +-
README | 194 +++-
conf/theme-anthra.conf | 31 +
conf/theme-darkredNG.conf | 6 +
conf/theme-default.conf | 5 +
conf/theme-iceblue.conf | 2 +
conf/theme-light.conf | 39 +
config.c | 641 ++++++-----
config.h | 384 ++++---
detailview.c | 1130 ++++++++++++++++++++
detailview.h | 161 +++
displaychannel.c | 647 +++--------
displaychannel.h | 60 +-
displaychannelview.c | 843 +++++++++++++++
displaychannelview.h | 69 ++
displaymenu.c | 282 +++--
displaymenu.h | 13 +-
displaymenuview.c | 795 +++++++-------
displaymenuview.h | 79 +-
displaymessage.c | 77 +-
displaymessage.h | 12 +-
displayreplay.c | 506 ++++++---
displayreplay.h | 37 +-
displaytracks.c | 135 ++-
displaytracks.h | 12 +-
displayvolume.c | 109 +-
displayvolume.h | 16 +-
fontmanager.c | 135 +++
fontmanager.h | 67 ++
geometrymanager.c | 227 ++++
geometrymanager.h | 115 ++
helpers.c | 143 ++-
helpers.h | 24 +
icons/alternative/vdrlogo_gen2vdr.png | Bin 22710 -> 20059 bytes
icons/anthra/extraIcons/Applikationen.png | Bin 0 -> 2073 bytes
icons/anthra/extraIcons/Audio.png | Bin 0 -> 2674 bytes
.../extraIcons/Aufnahmen-Liste aktualisieren.png | Bin 0 -> 3550 bytes
icons/anthra/extraIcons/Dienstprogramme.png | Bin 0 -> 1581 bytes
icons/anthra/extraIcons/FireFox.png | Bin 0 -> 3359 bytes
icons/anthra/extraIcons/Info.png | Bin 0 -> 2138 bytes
icons/anthra/extraIcons/Internet.png | Bin 0 -> 3801 bytes
icons/anthra/extraIcons/Medien.png | Bin 0 -> 3009 bytes
icons/anthra/extraIcons/Rechner neu starten.png | Bin 0 -> 2886 bytes
icons/anthra/extraIcons/Remote wakeup.png | Bin 0 -> 859 bytes
icons/anthra/extraIcons/Server pausieren.png | Bin 0 -> 2281 bytes
icons/anthra/extraIcons/Spiele.png | Bin 0 -> 2993 bytes
icons/anthra/extraIcons/System herunterfahren.png | Bin 0 -> 2713 bytes
icons/anthra/extraIcons/System.png | Bin 0 -> 3227 bytes
icons/anthra/extraIcons/Tools.png | Bin 0 -> 2355 bytes
icons/anthra/extraIcons/Tunderbird.png | Bin 0 -> 3544 bytes
.../USB Massenspeicher sicher entfernen.png | Bin 0 -> 2019 bytes
icons/anthra/extraIcons/VDR neu starten.png | Bin 0 -> 2577 bytes
icons/anthra/extraIcons/Video.png | Bin 0 -> 2276 bytes
icons/anthra/extraIcons/Web.png | Bin 0 -> 3930 bytes
icons/anthra/extraIcons/XBMC.png | Bin 0 -> 3336 bytes
icons/anthra/extraIcons/Xterm.png | Bin 0 -> 1575 bytes
icons/anthra/extraIcons/audiovideo.png | Bin 0 -> 2765 bytes
icons/anthra/extraIcons/markad_status.png | Bin 0 -> 2865 bytes
icons/anthra/extraIcons/schneiden_abbrechen.png | Bin 0 -> 3420 bytes
icons/anthra/extraIcons/tux.png | Bin 0 -> 3852 bytes
icons/anthra/extraIcons/usb.png | Bin 0 -> 1438 bytes
icons/anthra/extraIcons/vdrlogo.png | Bin 0 -> 12796 bytes
icons/anthra/extraIcons/yaicon_blue.png | Bin 0 -> 1931 bytes
icons/anthra/menuIcons/CAM.png | Bin 0 -> 1619 bytes
icons/anthra/menuIcons/Channels.png | Bin 0 -> 3561 bytes
icons/anthra/menuIcons/Commands.png | Bin 0 -> 2428 bytes
icons/anthra/menuIcons/DVB.png | Bin 0 -> 2758 bytes
icons/anthra/menuIcons/EPG.png | Bin 0 -> 2874 bytes
icons/anthra/menuIcons/LNB.png | Bin 0 -> 3739 bytes
icons/anthra/menuIcons/Miscellaneous.png | Bin 0 -> 1576 bytes
icons/anthra/menuIcons/OSD.png | Bin 0 -> 1577 bytes
icons/anthra/menuIcons/Plugins.png | Bin 0 -> 2230 bytes
icons/anthra/menuIcons/Recording.png | Bin 0 -> 1115 bytes
icons/anthra/menuIcons/Recordings.png | Bin 0 -> 3640 bytes
icons/anthra/menuIcons/Replay.png | Bin 0 -> 1059 bytes
icons/anthra/menuIcons/Restart.png | Bin 0 -> 2577 bytes
icons/anthra/menuIcons/Schedule.png | Bin 0 -> 2056 bytes
icons/anthra/menuIcons/Setup.png | Bin 0 -> 3179 bytes
icons/anthra/menuIcons/StopRecording.png | Bin 0 -> 547 bytes
icons/anthra/menuIcons/StopReplay.png | Bin 0 -> 1595 bytes
icons/anthra/menuIcons/Timers.png | Bin 0 -> 4113 bytes
icons/anthra/pluginIcons/arghdirector.png | Bin 0 -> 1824 bytes
icons/anthra/pluginIcons/autostart.png | Bin 0 -> 3320 bytes
icons/anthra/pluginIcons/avahi4vdr.png | Bin 0 -> 3734 bytes
icons/anthra/pluginIcons/avards.png | Bin 0 -> 665 bytes
icons/anthra/pluginIcons/block.png | Bin 0 -> 1341 bytes
icons/anthra/pluginIcons/burn.png | Bin 0 -> 4233 bytes
icons/anthra/pluginIcons/cdplayer.png | Bin 0 -> 2258 bytes
icons/anthra/pluginIcons/chanman.png | Bin 0 -> 3224 bytes
icons/anthra/pluginIcons/check.png | Bin 0 -> 2141 bytes
icons/anthra/pluginIcons/conflictcheckonly.png | Bin 0 -> 3050 bytes
icons/anthra/pluginIcons/ddci.png | Bin 0 -> 2876 bytes
icons/anthra/pluginIcons/devstatus.png | Bin 0 -> 3159 bytes
icons/anthra/pluginIcons/dummydevice.png | Bin 0 -> 2035 bytes
icons/anthra/pluginIcons/duplicates.png | Bin 0 -> 2485 bytes
icons/anthra/pluginIcons/dvbapi.png | Bin 0 -> 2869 bytes
icons/anthra/pluginIcons/dvbhddevice.png | Bin 0 -> 3175 bytes
icons/anthra/pluginIcons/dvbsddevice.png | Bin 0 -> 3588 bytes
icons/anthra/pluginIcons/dynamite.png | Bin 0 -> 3973 bytes
icons/anthra/pluginIcons/eepg.png | Bin 0 -> 3590 bytes
icons/anthra/pluginIcons/epg2vdr.png | Bin 0 -> 4051 bytes
icons/anthra/pluginIcons/epgsearch.png | Bin 0 -> 3228 bytes
icons/anthra/pluginIcons/epgsearchonly.png | Bin 0 -> 2983 bytes
icons/anthra/pluginIcons/epgsync.png | Bin 0 -> 3518 bytes
icons/anthra/pluginIcons/externalplayer.png | Bin 0 -> 2449 bytes
icons/anthra/pluginIcons/extrecmenu.png | Bin 0 -> 2323 bytes
icons/anthra/pluginIcons/favorites.png | Bin 0 -> 1375 bytes
icons/anthra/pluginIcons/femon.png | Bin 0 -> 3331 bytes
icons/anthra/pluginIcons/fepg.png | Bin 0 -> 2406 bytes
icons/anthra/pluginIcons/filebrowser.png | Bin 0 -> 1463 bytes
icons/anthra/pluginIcons/fritzbox.png | Bin 0 -> 1931 bytes
icons/anthra/pluginIcons/graphlcd.png | Bin 0 -> 1421 bytes
icons/anthra/pluginIcons/graphtft.png | Bin 0 -> 1421 bytes
icons/anthra/pluginIcons/image.png | Bin 0 -> 2559 bytes
icons/anthra/pluginIcons/imonlcd.png | Bin 0 -> 1421 bytes
icons/anthra/pluginIcons/iptv.png | Bin 0 -> 2774 bytes
icons/anthra/pluginIcons/lcdproc.png | Bin 0 -> 1421 bytes
icons/anthra/pluginIcons/mailbox.png | Bin 0 -> 1904 bytes
icons/anthra/pluginIcons/makemkv.png | Bin 0 -> 1941 bytes
icons/anthra/pluginIcons/markad.png | Bin 0 -> 2865 bytes
icons/anthra/pluginIcons/mlist.png | Bin 0 -> 2505 bytes
icons/anthra/pluginIcons/music.png | Bin 0 -> 2674 bytes
icons/anthra/pluginIcons/noepg.png | Bin 0 -> 3355 bytes
icons/anthra/pluginIcons/nordlichtsepg.png | Bin 0 -> 2643 bytes
icons/anthra/pluginIcons/osdteletext.png | Bin 0 -> 1591 bytes
icons/anthra/pluginIcons/peer.png | Bin 0 -> 4175 bytes
icons/anthra/pluginIcons/pin.png | Bin 0 -> 1680 bytes
icons/anthra/pluginIcons/play.png | Bin 0 -> 1059 bytes
icons/anthra/pluginIcons/pvrinput.png | Bin 0 -> 1976 bytes
icons/anthra/pluginIcons/quickepgsearch.png | Bin 0 -> 4781 bytes
icons/anthra/pluginIcons/radio.png | Bin 0 -> 2016 bytes
icons/anthra/pluginIcons/remote.png | Bin 0 -> 3807 bytes
icons/anthra/pluginIcons/remotetimers.png | Bin 0 -> 4372 bytes
icons/anthra/pluginIcons/rssreader.png | Bin 0 -> 2620 bytes
icons/anthra/pluginIcons/sc.png | Bin 0 -> 2208 bytes
icons/anthra/pluginIcons/scraper2vdr.png | Bin 0 -> 2726 bytes
icons/anthra/pluginIcons/screenshot.png | Bin 0 -> 2526 bytes
icons/anthra/pluginIcons/seduatmo.png | Bin 0 -> 2024 bytes
icons/anthra/pluginIcons/skyselectfeeds.png | Bin 0 -> 2852 bytes
icons/anthra/pluginIcons/sleeptimer.png | Bin 0 -> 4694 bytes
icons/anthra/pluginIcons/softhddevice.png | Bin 0 -> 2410 bytes
icons/anthra/pluginIcons/squeezebox.png | Bin 0 -> 2672 bytes
icons/anthra/pluginIcons/streamdev-server.png | Bin 0 -> 2821 bytes
icons/anthra/pluginIcons/systeminfo.png | Bin 0 -> 1709 bytes
icons/anthra/pluginIcons/targavfd.png | Bin 0 -> 1421 bytes
icons/anthra/pluginIcons/trayopenng.png | Bin 0 -> 1077 bytes
icons/anthra/pluginIcons/tvguide.png | Bin 0 -> 2129 bytes
icons/anthra/pluginIcons/tvm2vdr.png | Bin 0 -> 2622 bytes
icons/anthra/pluginIcons/tvscraper.png | Bin 0 -> 2726 bytes
icons/anthra/pluginIcons/undelete.png | Bin 0 -> 2947 bytes
icons/anthra/pluginIcons/vdrboblight.png | Bin 0 -> 2024 bytes
icons/anthra/pluginIcons/weatherhd.png | Bin 0 -> 1726 bytes
icons/anthra/pluginIcons/weatherng.png | Bin 0 -> 1726 bytes
icons/anthra/pluginIcons/xmltv2vdr.png | Bin 0 -> 2985 bytes
icons/anthra/pluginIcons/yaepghg.png | Bin 0 -> 2129 bytes
icons/anthra/skinElements/buttonblue.png | Bin 0 -> 9765 bytes
icons/anthra/skinElements/buttongreen.png | Bin 0 -> 9766 bytes
icons/anthra/skinElements/buttonred.png | Bin 0 -> 9765 bytes
icons/anthra/skinElements/buttonyellow.png | Bin 0 -> 9768 bytes
icons/anthra/skinElements/channellogoback.png | Bin 0 -> 60959 bytes
icons/anthra/skinElements/displaychannelback.png | Bin 0 -> 99428 bytes
.../skinElements/displaychannelback_right.png | Bin 0 -> 99428 bytes
icons/anthra/skinElements/displaychanneltop.png | Bin 0 -> 2980 bytes
.../skinElements/displaychanneltop_right.png | Bin 0 -> 3045 bytes
icons/anthra/skinElements/displayreplayback.png | Bin 0 -> 312209 bytes
icons/anthra/skinElements/displayreplaytop.png | Bin 0 -> 2658 bytes
icons/anthra/skinElements/displayvolume.png | Bin 0 -> 45870 bytes
icons/anthra/skinElements/header_mirroredtop.png | Bin 0 -> 991 bytes
icons/anthra/skinElements/headerback.png | Bin 0 -> 68584 bytes
icons/anthra/skinElements/headerback_mirrored.png | Bin 0 -> 68584 bytes
icons/anthra/skinElements/headertop.png | Bin 0 -> 992 bytes
icons/anthra/skinElements/menubutton.png | Bin 0 -> 30993 bytes
icons/anthra/skinElements/menubuttonactive.png | Bin 0 -> 15360 bytes
icons/anthra/skinElements/menubuttondefault.png | Bin 0 -> 54705 bytes
.../skinElements/menubuttondefaultactive.png | Bin 0 -> 15587 bytes
icons/anthra/skinElements/menubuttontop.png | Bin 0 -> 504 bytes
icons/anthra/skinElements/messageError.png | Bin 0 -> 95360 bytes
icons/anthra/skinElements/messageInfo.png | Bin 0 -> 95360 bytes
icons/anthra/skinElements/messageStatus.png | Bin 0 -> 95360 bytes
icons/anthra/skinElements/messageWarning.png | Bin 0 -> 95363 bytes
icons/anthra/skinElements/scrollbar.png | Bin 0 -> 7692 bytes
icons/anthra/skinIcons/Channelseparator.png | Bin 0 -> 28822 bytes
icons/anthra/skinIcons/DiskUsage.png | Bin 0 -> 2763 bytes
icons/anthra/skinIcons/Thumbs.db | Bin 0 -> 119296 bytes
icons/anthra/skinIcons/ac3.png | Bin 0 -> 2684 bytes
icons/anthra/skinIcons/activetimer.png | Bin 0 -> 1731 bytes
icons/anthra/skinIcons/activetimersmall.png | Bin 0 -> 833 bytes
icons/anthra/skinIcons/arrowLeftChannelSep.png | Bin 0 -> 6904 bytes
icons/anthra/skinIcons/arrowRightChannelSep.png | Bin 0 -> 6570 bytes
icons/anthra/skinIcons/channeldelimiter.png | Bin 0 -> 3615 bytes
icons/anthra/skinIcons/crypted.png | Bin 0 -> 609 bytes
icons/anthra/skinIcons/daydelimiter.png | Bin 0 -> 2785 bytes
icons/anthra/skinIcons/defaultPoster.png | Bin 0 -> 1600 bytes
icons/anthra/skinIcons/discpercent.png | Bin 0 -> 2539 bytes
icons/anthra/skinIcons/dolbyoff.png | Bin 0 -> 964 bytes
icons/anthra/skinIcons/dolbyon.png | Bin 0 -> 954 bytes
icons/anthra/skinIcons/encrypted.png | Bin 0 -> 957 bytes
icons/anthra/skinIcons/fta.png | Bin 0 -> 800 bytes
icons/anthra/skinIcons/fwd.png | Bin 0 -> 9157 bytes
icons/anthra/skinIcons/fwdInactive.png | Bin 0 -> 8586 bytes
icons/anthra/skinIcons/fwdx1.png | Bin 0 -> 9870 bytes
icons/anthra/skinIcons/fwdx2.png | Bin 0 -> 10413 bytes
icons/anthra/skinIcons/fwdx3.png | Bin 0 -> 10936 bytes
icons/anthra/skinIcons/hd1080i.png | Bin 0 -> 1487 bytes
icons/anthra/skinIcons/hd1080i_rec.png | Bin 0 -> 1487 bytes
icons/anthra/skinIcons/hd720p.png | Bin 0 -> 1480 bytes
icons/anthra/skinIcons/hd720p_rec.png | Bin 0 -> 1480 bytes
icons/anthra/skinIcons/newrecording.png | Bin 0 -> 2815 bytes
icons/anthra/skinIcons/pause.png | Bin 0 -> 4628 bytes
icons/anthra/skinIcons/pauseInactive.png | Bin 0 -> 5744 bytes
icons/anthra/skinIcons/play.png | Bin 0 -> 7094 bytes
icons/anthra/skinIcons/playInactive.png | Bin 0 -> 6750 bytes
icons/anthra/skinIcons/radio.png | Bin 0 -> 1385 bytes
icons/anthra/skinIcons/recfolder.png | Bin 0 -> 2000 bytes
icons/anthra/skinIcons/recoff.png | Bin 0 -> 2530 bytes
icons/anthra/skinIcons/recon.png | Bin 0 -> 2763 bytes
icons/anthra/skinIcons/recordingcutted.png | Bin 0 -> 2007 bytes
icons/anthra/skinIcons/recordingdatetime.png | Bin 0 -> 1349 bytes
icons/anthra/skinIcons/rew.png | Bin 0 -> 8967 bytes
icons/anthra/skinIcons/rewInactive.png | Bin 0 -> 8162 bytes
icons/anthra/skinIcons/rewx1.png | Bin 0 -> 9684 bytes
icons/anthra/skinIcons/rewx2.png | Bin 0 -> 10261 bytes
icons/anthra/skinIcons/rewx3.png | Bin 0 -> 10771 bytes
icons/anthra/skinIcons/sd576i.png | Bin 0 -> 1502 bytes
icons/anthra/skinIcons/sd576i_rec.png | Bin 0 -> 1502 bytes
icons/anthra/skinIcons/stereo.png | Bin 0 -> 4433 bytes
icons/anthra/skinIcons/stereooff.png | Bin 0 -> 1045 bytes
icons/anthra/skinIcons/stereoon.png | Bin 0 -> 729 bytes
icons/anthra/skinIcons/timerActive.png | Bin 0 -> 3297 bytes
icons/anthra/skinIcons/timerInactive.png | Bin 0 -> 1524 bytes
icons/anthra/skinIcons/timerRecording.png | Bin 0 -> 528 bytes
icons/anthra/skinIcons/tracks.png | Bin 0 -> 2674 bytes
icons/anthra/skinIcons/txtoff.png | Bin 0 -> 377 bytes
icons/anthra/skinIcons/txton.png | Bin 0 -> 382 bytes
icons/anthra/skinIcons/vdrlogo.png | Bin 0 -> 10352 bytes
icons/darkblue/skinElements/channellogoback.png | Bin 0 -> 19740 bytes
icons/darkgrey/menuIcons/CAM.png | Bin 0 -> 14978 bytes
icons/darkgrey/menuIcons/Channels.png | Bin 0 -> 17490 bytes
icons/darkgrey/menuIcons/Commands.png | Bin 0 -> 9202 bytes
icons/darkgrey/menuIcons/DVB.png | Bin 0 -> 11451 bytes
icons/darkgrey/menuIcons/EPG.png | Bin 0 -> 10813 bytes
icons/darkgrey/menuIcons/LNB.png | Bin 0 -> 12980 bytes
icons/darkgrey/menuIcons/Miscellaneous.png | Bin 0 -> 17547 bytes
icons/darkgrey/menuIcons/OSD.png | Bin 0 -> 9950 bytes
icons/darkgrey/menuIcons/Plugins.png | Bin 0 -> 10477 bytes
icons/darkgrey/menuIcons/Recording.png | Bin 0 -> 15970 bytes
icons/darkgrey/menuIcons/Recordings.png | Bin 0 -> 17160 bytes
icons/darkgrey/menuIcons/Replay.png | Bin 0 -> 16421 bytes
icons/darkgrey/menuIcons/Restart.png | Bin 0 -> 14220 bytes
icons/darkgrey/menuIcons/Schedule.png | Bin 0 -> 17960 bytes
icons/darkgrey/menuIcons/Setup.png | Bin 0 -> 11397 bytes
icons/darkgrey/menuIcons/StopRecording.png | Bin 0 -> 15751 bytes
icons/darkgrey/menuIcons/StopReplay.png | Bin 0 -> 17031 bytes
icons/darkgrey/menuIcons/Timers.png | Bin 0 -> 18281 bytes
icons/darkgrey/pluginIcons/admin.png | Bin 0 -> 14214 bytes
icons/darkgrey/pluginIcons/arghdirector.png | Bin 0 -> 13258 bytes
icons/darkgrey/pluginIcons/autostart.png | Bin 0 -> 14948 bytes
icons/darkgrey/pluginIcons/avahi4vdr.png | Bin 0 -> 16148 bytes
icons/darkgrey/pluginIcons/avards.png | Bin 0 -> 11803 bytes
icons/darkgrey/pluginIcons/block.png | Bin 0 -> 15920 bytes
icons/darkgrey/pluginIcons/burn.png | Bin 0 -> 16975 bytes
icons/darkgrey/pluginIcons/cdplayer.png | Bin 0 -> 17059 bytes
icons/darkgrey/pluginIcons/chanman.png | Bin 0 -> 17043 bytes
icons/darkgrey/pluginIcons/ddci.png | Bin 0 -> 18312 bytes
icons/darkgrey/pluginIcons/devstatus.png | Bin 0 -> 17169 bytes
icons/darkgrey/pluginIcons/dummydevice.png | Bin 0 -> 14142 bytes
icons/darkgrey/pluginIcons/duplicates.png | Bin 0 -> 14087 bytes
icons/darkgrey/pluginIcons/dvbapi.png | Bin 0 -> 16072 bytes
icons/darkgrey/pluginIcons/dvbhddevice.png | Bin 0 -> 16276 bytes
icons/darkgrey/pluginIcons/dvbsddevice.png | Bin 0 -> 16814 bytes
icons/darkgrey/pluginIcons/dynamite.png | Bin 0 -> 13995 bytes
icons/darkgrey/pluginIcons/eepg.png | Bin 0 -> 15850 bytes
icons/darkgrey/pluginIcons/epgfixer.png | Bin 0 -> 16128 bytes
icons/darkgrey/pluginIcons/epgsearch.png | Bin 0 -> 16976 bytes
icons/darkgrey/pluginIcons/epgsync.png | Bin 0 -> 16558 bytes
icons/darkgrey/pluginIcons/externalplayer.png | Bin 0 -> 14320 bytes
icons/darkgrey/pluginIcons/favorites.png | Bin 0 -> 13944 bytes
icons/darkgrey/pluginIcons/femon.png | Bin 0 -> 14907 bytes
icons/darkgrey/pluginIcons/fepg.png | Bin 0 -> 16253 bytes
icons/darkgrey/pluginIcons/filebrowser.png | Bin 0 -> 16413 bytes
icons/darkgrey/pluginIcons/fritzbox.png | Bin 0 -> 17878 bytes
icons/darkgrey/pluginIcons/graphlcd.png | Bin 0 -> 15829 bytes
icons/darkgrey/pluginIcons/graphtft.png | Bin 0 -> 14207 bytes
icons/darkgrey/pluginIcons/image.png | Bin 0 -> 17498 bytes
icons/darkgrey/pluginIcons/imonlcd.png | Bin 0 -> 15014 bytes
icons/darkgrey/pluginIcons/iptv.png | Bin 0 -> 16047 bytes
icons/darkgrey/pluginIcons/lcdproc.png | Bin 0 -> 16084 bytes
icons/darkgrey/pluginIcons/markad.png | Bin 0 -> 13382 bytes
icons/darkgrey/pluginIcons/mlist.png | Bin 0 -> 18093 bytes
icons/darkgrey/pluginIcons/noepg.png | Bin 0 -> 18127 bytes
icons/darkgrey/pluginIcons/osdteletext.png | Bin 0 -> 14259 bytes
icons/darkgrey/pluginIcons/remote.png | Bin 0 -> 14916 bytes
icons/darkgrey/pluginIcons/remotetimers.png | Bin 0 -> 17555 bytes
icons/darkgrey/pluginIcons/rssreader.png | Bin 0 -> 14557 bytes
icons/darkgrey/pluginIcons/sc.png | Bin 0 -> 16870 bytes
icons/darkgrey/pluginIcons/screenshot.png | Bin 0 -> 15226 bytes
icons/darkgrey/pluginIcons/seduatmo.png | Bin 0 -> 11780 bytes
icons/darkgrey/pluginIcons/sleeptimer.png | Bin 0 -> 14521 bytes
icons/darkgrey/pluginIcons/softhddevice.png | Bin 0 -> 16013 bytes
icons/darkgrey/pluginIcons/streamdev.png | Bin 0 -> 15991 bytes
icons/darkgrey/pluginIcons/systeminfo.png | Bin 0 -> 17621 bytes
icons/darkgrey/pluginIcons/targavfd.png | Bin 0 -> 16041 bytes
icons/darkgrey/pluginIcons/trayopenng.png | Bin 0 -> 13102 bytes
icons/darkgrey/pluginIcons/tvguide.png | Bin 0 -> 18299 bytes
icons/darkgrey/pluginIcons/undelete.png | Bin 0 -> 17030 bytes
icons/darkgrey/pluginIcons/weatherng.png | Bin 0 -> 15967 bytes
icons/darkgrey/skinElements/channellogoback.png | Bin 0 -> 37758 bytes
icons/darkgrey/skinIcons/Channelseparator.png | Bin 0 -> 28668 bytes
icons/darkgrey/skinIcons/DiskUsage.png | Bin 0 -> 16360 bytes
icons/darkgrey/skinIcons/activetimer.png | Bin 0 -> 6437 bytes
icons/darkgrey/skinIcons/activetimersmall.png | Bin 0 -> 3328 bytes
icons/darkgrey/skinIcons/arrowLeftChannelSep.png | Bin 0 -> 1768 bytes
icons/darkgrey/skinIcons/arrowRightChannelSep.png | Bin 0 -> 1855 bytes
icons/darkgrey/skinIcons/daydelimiter.png | Bin 0 -> 20612 bytes
icons/darkgrey/skinIcons/encrypted.png | Bin 0 -> 4368 bytes
icons/{ => darkgrey}/skinIcons/fwd.png | Bin 18838 -> 16191 bytes
icons/darkgrey/skinIcons/fwdx1.png | Bin 0 -> 16234 bytes
icons/darkgrey/skinIcons/fwdx2.png | Bin 0 -> 16374 bytes
icons/darkgrey/skinIcons/fwdx3.png | Bin 0 -> 16548 bytes
icons/{ => darkgrey}/skinIcons/pause.png | Bin 15668 -> 13021 bytes
icons/{ => darkgrey}/skinIcons/play.png | Bin 17112 -> 14465 bytes
icons/darkgrey/skinIcons/recordingcutted.png | Bin 0 -> 4764 bytes
icons/darkgrey/skinIcons/recordingdatetime.png | Bin 0 -> 7344 bytes
icons/darkgrey/skinIcons/recordingfolder.png | Bin 0 -> 14387 bytes
icons/{ => darkgrey}/skinIcons/rew.png | Bin 18552 -> 15905 bytes
icons/darkgrey/skinIcons/rewx1.png | Bin 0 -> 15930 bytes
icons/darkgrey/skinIcons/rewx2.png | Bin 0 -> 16086 bytes
icons/darkgrey/skinIcons/rewx3.png | Bin 0 -> 16269 bytes
icons/darkgrey/skinIcons/timerActive.png | Bin 0 -> 38752 bytes
icons/darkgrey/skinIcons/timerInactive.png | Bin 0 -> 49777 bytes
icons/darkgrey/skinIcons/tracks.png | Bin 0 -> 19101 bytes
icons/darkgrey/skinIcons/vdrlogo.png | Bin 0 -> 11727 bytes
icons/darkred/menuIcons/Commands.png | Bin 14725 -> 9202 bytes
icons/darkred/menuIcons/Setup.png | Bin 16531 -> 11397 bytes
icons/darkred/pluginIcons/admin.png | Bin 18722 -> 14214 bytes
icons/darkred/pluginIcons/dvbhddevice.png | Bin 0 -> 16276 bytes
icons/darkred/pluginIcons/dvbsddevice.png | Bin 0 -> 16814 bytes
icons/darkred/pluginIcons/graphtft.png | Bin 0 -> 14207 bytes
icons/darkred/pluginIcons/nordlichtsepg.png | Bin 0 -> 16904 bytes
icons/darkred/pluginIcons/undelete.png | Bin 0 -> 17030 bytes
icons/darkred/pluginIcons/weatherng.png | Bin 0 -> 15967 bytes
icons/darkred/skinElements/channellogoback.png | Bin 0 -> 20750 bytes
icons/darkred/skinIcons/Channelseparator.png | Bin 13541 -> 7595 bytes
icons/darkred/skinIcons/DiskUsage.png | Bin 20123 -> 16360 bytes
icons/darkred/skinIcons/arrowLeftChannelSep.png | Bin 0 -> 1764 bytes
icons/darkred/skinIcons/arrowRightChannelSep.png | Bin 0 -> 1802 bytes
icons/darkred/skinIcons/channelsymbols.png | Bin 6674 -> 4049 bytes
.../{channelsymbols.png => channelsymbols1.png} | Bin
icons/darkred/skinIcons/crypted.png | Bin 0 -> 2778 bytes
icons/darkred/skinIcons/daydelimiter.png | Bin 18885 -> 14122 bytes
icons/darkred/skinIcons/dolbyoff.png | Bin 0 -> 2347 bytes
icons/darkred/skinIcons/dolbyon.png | Bin 0 -> 2730 bytes
icons/darkred/skinIcons/fta.png | Bin 0 -> 2345 bytes
icons/darkred/skinIcons/fwdx1.png | Bin 0 -> 15152 bytes
icons/darkred/skinIcons/fwdx2.png | Bin 0 -> 15360 bytes
icons/darkred/skinIcons/fwdx3.png | Bin 0 -> 15648 bytes
icons/darkred/skinIcons/hd1080i.png | Bin 5147 -> 3313 bytes
icons/darkred/skinIcons/hd1080i_rec.png | Bin 0 -> 3328 bytes
icons/darkred/skinIcons/hd720p.png | Bin 5173 -> 3248 bytes
icons/darkred/skinIcons/hd720p_rec.png | Bin 0 -> 3237 bytes
icons/darkred/skinIcons/recoff.png | Bin 0 -> 2246 bytes
icons/darkred/skinIcons/recon.png | Bin 0 -> 2508 bytes
icons/darkred/skinIcons/rewx1.png | Bin 0 -> 15188 bytes
icons/darkred/skinIcons/rewx2.png | Bin 0 -> 15403 bytes
icons/darkred/skinIcons/rewx3.png | Bin 0 -> 15662 bytes
icons/darkred/skinIcons/sd576i.png | Bin 5768 -> 3390 bytes
icons/darkred/skinIcons/sd576i_rec.png | Bin 0 -> 3390 bytes
icons/darkred/skinIcons/stereooff.png | Bin 0 -> 2558 bytes
icons/darkred/skinIcons/stereoon.png | Bin 0 -> 3062 bytes
icons/darkred/skinIcons/tracks.png | Bin 21616 -> 19101 bytes
icons/darkred/skinIcons/txtoff.png | Bin 0 -> 2021 bytes
icons/darkred/skinIcons/txton.png | Bin 0 -> 2218 bytes
icons/darkred/skinIcons/vdrlogo.png | Bin 13461 -> 12959 bytes
icons/darkredNG/extraIcons/Applikationen.png | Bin 0 -> 2073 bytes
icons/darkredNG/extraIcons/Audio.png | Bin 0 -> 2674 bytes
.../extraIcons/Aufnahmen-Liste aktualisieren.png | Bin 0 -> 3550 bytes
icons/darkredNG/extraIcons/Dienstprogramme.png | Bin 0 -> 1581 bytes
icons/darkredNG/extraIcons/FireFox.png | Bin 0 -> 3359 bytes
icons/darkredNG/extraIcons/Info.png | Bin 0 -> 2138 bytes
icons/darkredNG/extraIcons/Internet.png | Bin 0 -> 3801 bytes
icons/darkredNG/extraIcons/Medien.png | Bin 0 -> 3009 bytes
icons/darkredNG/extraIcons/Rechner neu starten.png | Bin 0 -> 2886 bytes
icons/darkredNG/extraIcons/Remote wakeup.png | Bin 0 -> 859 bytes
icons/darkredNG/extraIcons/Spiele.png | Bin 0 -> 2993 bytes
.../darkredNG/extraIcons/System herunterfahren.png | Bin 0 -> 2713 bytes
icons/darkredNG/extraIcons/System.png | Bin 0 -> 3227 bytes
icons/darkredNG/extraIcons/Tools.png | Bin 0 -> 2355 bytes
icons/darkredNG/extraIcons/Tunderbird.png | Bin 0 -> 3544 bytes
.../USB Massenspeicher sicher entfernen.png | Bin 0 -> 2019 bytes
icons/darkredNG/extraIcons/VDR neu starten.png | Bin 0 -> 2577 bytes
icons/darkredNG/extraIcons/Video.png | Bin 0 -> 2276 bytes
icons/darkredNG/extraIcons/Web.png | Bin 0 -> 3930 bytes
icons/darkredNG/extraIcons/XBMC.png | Bin 0 -> 3336 bytes
icons/darkredNG/extraIcons/Xterm.png | Bin 0 -> 1575 bytes
icons/darkredNG/extraIcons/audiovideo.png | Bin 0 -> 2765 bytes
icons/darkredNG/extraIcons/markad_status.png | Bin 0 -> 2865 bytes
icons/darkredNG/extraIcons/schneiden_abbrechen.png | Bin 0 -> 3420 bytes
icons/darkredNG/extraIcons/tux.png | Bin 0 -> 3852 bytes
icons/darkredNG/extraIcons/usb.png | Bin 0 -> 1438 bytes
icons/darkredNG/extraIcons/vdrlogo.png | Bin 0 -> 12796 bytes
icons/darkredNG/extraIcons/yaicon_blue.png | Bin 0 -> 1931 bytes
icons/darkredNG/menuIcons/CAM.png | Bin 0 -> 1619 bytes
icons/darkredNG/menuIcons/Channels.png | Bin 0 -> 3561 bytes
icons/darkredNG/menuIcons/Commands.png | Bin 0 -> 2428 bytes
icons/darkredNG/menuIcons/DVB.png | Bin 0 -> 2758 bytes
icons/darkredNG/menuIcons/EPG.png | Bin 0 -> 2874 bytes
icons/darkredNG/menuIcons/LNB.png | Bin 0 -> 3739 bytes
icons/darkredNG/menuIcons/Miscellaneous.png | Bin 0 -> 1576 bytes
icons/darkredNG/menuIcons/OSD.png | Bin 0 -> 1577 bytes
icons/darkredNG/menuIcons/Plugins.png | Bin 0 -> 2230 bytes
icons/darkredNG/menuIcons/Recording.png | Bin 0 -> 1115 bytes
icons/darkredNG/menuIcons/Recordings.png | Bin 0 -> 3640 bytes
icons/darkredNG/menuIcons/Replay.png | Bin 0 -> 1059 bytes
icons/darkredNG/menuIcons/Restart.png | Bin 0 -> 2577 bytes
icons/darkredNG/menuIcons/Schedule.png | Bin 0 -> 2056 bytes
icons/darkredNG/menuIcons/Setup.png | Bin 0 -> 3179 bytes
icons/darkredNG/menuIcons/StopRecording.png | Bin 0 -> 547 bytes
icons/darkredNG/menuIcons/StopReplay.png | Bin 0 -> 1595 bytes
icons/darkredNG/menuIcons/Timers.png | Bin 0 -> 4113 bytes
icons/darkredNG/pluginIcons/admin.png | Bin 0 -> 2355 bytes
icons/darkredNG/pluginIcons/arghdirector.png | Bin 0 -> 1824 bytes
icons/darkredNG/pluginIcons/autostart.png | Bin 0 -> 3320 bytes
icons/darkredNG/pluginIcons/avahi4vdr.png | Bin 0 -> 3734 bytes
icons/darkredNG/pluginIcons/avards.png | Bin 0 -> 665 bytes
icons/darkredNG/pluginIcons/block.png | Bin 0 -> 1341 bytes
icons/darkredNG/pluginIcons/burn.png | Bin 0 -> 4233 bytes
icons/darkredNG/pluginIcons/cdplayer.png | Bin 0 -> 2258 bytes
icons/darkredNG/pluginIcons/chanman.png | Bin 0 -> 3224 bytes
icons/darkredNG/pluginIcons/check.png | Bin 0 -> 2141 bytes
icons/darkredNG/pluginIcons/conflictcheckonly.png | Bin 0 -> 3050 bytes
icons/darkredNG/pluginIcons/ddci.png | Bin 0 -> 2876 bytes
icons/darkredNG/pluginIcons/devstatus.png | Bin 0 -> 3159 bytes
icons/darkredNG/pluginIcons/dummydevice.png | Bin 0 -> 2035 bytes
icons/darkredNG/pluginIcons/duplicates.png | Bin 0 -> 2485 bytes
icons/darkredNG/pluginIcons/dvbapi.png | Bin 0 -> 2869 bytes
icons/darkredNG/pluginIcons/dvbhddevice.png | Bin 0 -> 3175 bytes
icons/darkredNG/pluginIcons/dvbsddevice.png | Bin 0 -> 3588 bytes
icons/darkredNG/pluginIcons/dynamite.png | Bin 0 -> 3973 bytes
icons/darkredNG/pluginIcons/eepg.png | Bin 0 -> 3590 bytes
icons/darkredNG/pluginIcons/epg2vdr.png | Bin 0 -> 4051 bytes
icons/darkredNG/pluginIcons/epgsearch.png | Bin 0 -> 3228 bytes
icons/darkredNG/pluginIcons/epgsearchonly.png | Bin 0 -> 2983 bytes
icons/darkredNG/pluginIcons/epgsync.png | Bin 0 -> 3518 bytes
icons/darkredNG/pluginIcons/externalplayer.png | Bin 0 -> 2449 bytes
icons/darkredNG/pluginIcons/extrecmenu.png | Bin 0 -> 2323 bytes
icons/darkredNG/pluginIcons/favorites.png | Bin 0 -> 1375 bytes
icons/darkredNG/pluginIcons/femon.png | Bin 0 -> 3331 bytes
icons/darkredNG/pluginIcons/fepg.png | Bin 0 -> 2406 bytes
icons/darkredNG/pluginIcons/filebrowser.png | Bin 0 -> 1463 bytes
icons/darkredNG/pluginIcons/fritzbox.png | Bin 0 -> 1931 bytes
icons/darkredNG/pluginIcons/graphlcd.png | Bin 0 -> 1421 bytes
icons/darkredNG/pluginIcons/graphtft.png | Bin 0 -> 1421 bytes
icons/darkredNG/pluginIcons/image.png | Bin 0 -> 2559 bytes
icons/darkredNG/pluginIcons/imonlcd.png | Bin 0 -> 1421 bytes
icons/darkredNG/pluginIcons/iptv.png | Bin 0 -> 2774 bytes
icons/darkredNG/pluginIcons/lcdproc.png | Bin 0 -> 1421 bytes
icons/darkredNG/pluginIcons/mailbox.png | Bin 0 -> 1904 bytes
icons/darkredNG/pluginIcons/makemkv.png | Bin 0 -> 1941 bytes
icons/darkredNG/pluginIcons/markad.png | Bin 0 -> 2865 bytes
icons/darkredNG/pluginIcons/mlist.png | Bin 0 -> 2505 bytes
icons/darkredNG/pluginIcons/music.png | Bin 0 -> 2674 bytes
icons/darkredNG/pluginIcons/noepg.png | Bin 0 -> 3355 bytes
icons/darkredNG/pluginIcons/nordlichtsepg.png | Bin 0 -> 2643 bytes
icons/darkredNG/pluginIcons/osdteletext.png | Bin 0 -> 1591 bytes
icons/darkredNG/pluginIcons/peer.png | Bin 0 -> 4175 bytes
icons/darkredNG/pluginIcons/play.png | Bin 0 -> 1059 bytes
icons/darkredNG/pluginIcons/pvrinput.png | Bin 0 -> 1976 bytes
icons/darkredNG/pluginIcons/quickepgsearch.png | Bin 0 -> 4781 bytes
icons/darkredNG/pluginIcons/radio.png | Bin 0 -> 2016 bytes
icons/darkredNG/pluginIcons/remote.png | Bin 0 -> 3807 bytes
icons/darkredNG/pluginIcons/remotetimers.png | Bin 0 -> 4372 bytes
icons/darkredNG/pluginIcons/rssreader.png | Bin 0 -> 2620 bytes
icons/darkredNG/pluginIcons/sc.png | Bin 0 -> 2208 bytes
icons/darkredNG/pluginIcons/screenshot.png | Bin 0 -> 2526 bytes
icons/darkredNG/pluginIcons/seduatmo.png | Bin 0 -> 2024 bytes
icons/darkredNG/pluginIcons/skyselectfeeds.png | Bin 0 -> 2852 bytes
icons/darkredNG/pluginIcons/sleeptimer.png | Bin 0 -> 4694 bytes
icons/darkredNG/pluginIcons/softhddevice.png | Bin 0 -> 2410 bytes
icons/darkredNG/pluginIcons/streamdev-server.png | Bin 0 -> 2821 bytes
icons/darkredNG/pluginIcons/systeminfo.png | Bin 0 -> 1709 bytes
icons/darkredNG/pluginIcons/targavfd.png | Bin 0 -> 1421 bytes
icons/darkredNG/pluginIcons/trayopenng.png | Bin 0 -> 1077 bytes
icons/darkredNG/pluginIcons/tvguide.png | Bin 0 -> 2129 bytes
icons/darkredNG/pluginIcons/tvm2vdr.png | Bin 0 -> 2622 bytes
icons/darkredNG/pluginIcons/tvscraper.png | Bin 0 -> 2726 bytes
icons/darkredNG/pluginIcons/undelete.png | Bin 0 -> 2947 bytes
icons/darkredNG/pluginIcons/weatherng.png | Bin 0 -> 1726 bytes
icons/darkredNG/pluginIcons/xmltv2vdr.png | Bin 0 -> 2985 bytes
icons/darkredNG/pluginIcons/yaepghg.png | Bin 0 -> 2129 bytes
icons/darkredNG/skinElements/buttonblue.png | Bin 0 -> 13646 bytes
icons/darkredNG/skinElements/buttongreen.png | Bin 0 -> 13983 bytes
icons/darkredNG/skinElements/buttonred.png | Bin 0 -> 12620 bytes
icons/darkredNG/skinElements/buttonyellow.png | Bin 0 -> 13701 bytes
icons/darkredNG/skinElements/channellogoback.png | Bin 0 -> 35765 bytes
.../darkredNG/skinElements/displaychannelback.png | Bin 0 -> 294017 bytes
.../skinElements/displaychannelback_right.png | Bin 0 -> 290737 bytes
icons/darkredNG/skinElements/displaychanneltop.png | Bin 0 -> 101277 bytes
.../skinElements/displaychanneltop_right.png | Bin 0 -> 102937 bytes
icons/darkredNG/skinElements/displayreplayback.png | Bin 0 -> 293482 bytes
icons/darkredNG/skinElements/displayvolume.png | Bin 0 -> 55712 bytes
.../darkredNG/skinElements/header_mirroredback.png | Bin 0 -> 90195 bytes
.../darkredNG/skinElements/header_mirroredtop.png | Bin 0 -> 40519 bytes
icons/darkredNG/skinElements/headerback.png | Bin 0 -> 90159 bytes
icons/darkredNG/skinElements/headertop.png | Bin 0 -> 40302 bytes
icons/darkredNG/skinElements/menubutton.png | Bin 0 -> 38893 bytes
icons/darkredNG/skinElements/menubuttonactive.png | Bin 0 -> 7365 bytes
icons/darkredNG/skinElements/menubuttondefault.png | Bin 0 -> 57696 bytes
.../skinElements/menubuttondefaultactive.png | Bin 0 -> 56948 bytes
icons/darkredNG/skinElements/messageError.png | Bin 0 -> 105535 bytes
icons/darkredNG/skinElements/messageInfo.png | Bin 0 -> 111664 bytes
icons/darkredNG/skinElements/messageStatus.png | Bin 0 -> 115980 bytes
icons/darkredNG/skinElements/messageWarning.png | Bin 0 -> 110952 bytes
icons/darkredNG/skinElements/scrollbar.png | Bin 0 -> 12553 bytes
icons/darkredNG/skinIcons/Channelseparator.png | Bin 0 -> 37855 bytes
icons/darkredNG/skinIcons/DiskUsage.png | Bin 0 -> 2835 bytes
icons/darkredNG/skinIcons/ac3.png | Bin 0 -> 2684 bytes
icons/darkredNG/skinIcons/activetimer.png | Bin 0 -> 1731 bytes
icons/darkredNG/skinIcons/activetimersmall.png | Bin 0 -> 833 bytes
icons/darkredNG/skinIcons/arrowLeftChannelSep.png | Bin 0 -> 9782 bytes
icons/darkredNG/skinIcons/arrowRightChannelSep.png | Bin 0 -> 10540 bytes
icons/darkredNG/skinIcons/channeldelimiter.png | Bin 0 -> 4688 bytes
icons/darkredNG/skinIcons/crypted.png | Bin 0 -> 4409 bytes
icons/darkredNG/skinIcons/daydelimiter.png | Bin 0 -> 2785 bytes
icons/darkredNG/skinIcons/defaultPoster.png | Bin 0 -> 1586 bytes
icons/darkredNG/skinIcons/discpercent.png | Bin 0 -> 3369 bytes
icons/darkredNG/skinIcons/dolbyoff - Kopie.png | Bin 0 -> 1791 bytes
icons/darkredNG/skinIcons/dolbyoff.png | Bin 0 -> 4142 bytes
icons/darkredNG/skinIcons/dolbyon.png | Bin 0 -> 4547 bytes
icons/darkredNG/skinIcons/encrypted.png | Bin 0 -> 957 bytes
icons/darkredNG/skinIcons/fta - Kopie.png | Bin 0 -> 1641 bytes
icons/darkredNG/skinIcons/fta.png | Bin 0 -> 4081 bytes
icons/darkredNG/skinIcons/fwd.png | Bin 0 -> 12210 bytes
icons/darkredNG/skinIcons/fwdInactive.png | Bin 0 -> 12656 bytes
icons/darkredNG/skinIcons/fwdx1.png | Bin 0 -> 13911 bytes
icons/darkredNG/skinIcons/fwdx2.png | Bin 0 -> 14268 bytes
icons/darkredNG/skinIcons/fwdx3.png | Bin 0 -> 14752 bytes
icons/darkredNG/skinIcons/hd1080i.png | Bin 0 -> 3313 bytes
icons/darkredNG/skinIcons/hd1080i_rec.png | Bin 0 -> 3328 bytes
icons/darkredNG/skinIcons/hd720p.png | Bin 0 -> 3248 bytes
icons/darkredNG/skinIcons/hd720p_rec.png | Bin 0 -> 3237 bytes
icons/darkredNG/skinIcons/newrecording.png | Bin 0 -> 2815 bytes
icons/darkredNG/skinIcons/pause.png | Bin 0 -> 6316 bytes
icons/darkredNG/skinIcons/pauseInactive.png | Bin 0 -> 6329 bytes
icons/darkredNG/skinIcons/play.png | Bin 0 -> 10119 bytes
icons/darkredNG/skinIcons/playInactive.png | Bin 0 -> 10871 bytes
icons/darkredNG/skinIcons/radio.png | Bin 0 -> 2188 bytes
icons/darkredNG/skinIcons/recfolder.png | Bin 0 -> 2423 bytes
icons/darkredNG/skinIcons/recoff.png | Bin 0 -> 4036 bytes
icons/darkredNG/skinIcons/recon.png | Bin 0 -> 4322 bytes
icons/darkredNG/skinIcons/recordingcutted.png | Bin 0 -> 2007 bytes
icons/darkredNG/skinIcons/recordingdatetime.png | Bin 0 -> 1349 bytes
icons/darkredNG/skinIcons/rew.png | Bin 0 -> 11793 bytes
icons/darkredNG/skinIcons/rewInactive.png | Bin 0 -> 13211 bytes
icons/darkredNG/skinIcons/rewx1.png | Bin 0 -> 13221 bytes
icons/darkredNG/skinIcons/rewx2.png | Bin 0 -> 13842 bytes
icons/darkredNG/skinIcons/rewx3.png | Bin 0 -> 14562 bytes
icons/darkredNG/skinIcons/sd576i.png | Bin 0 -> 3390 bytes
icons/darkredNG/skinIcons/sd576i_rec.png | Bin 0 -> 3390 bytes
icons/darkredNG/skinIcons/stereo.png | Bin 0 -> 4433 bytes
icons/darkredNG/skinIcons/stereooff.png | Bin 0 -> 4224 bytes
icons/darkredNG/skinIcons/stereoon.png | Bin 0 -> 4606 bytes
icons/darkredNG/skinIcons/timerActive.png | Bin 0 -> 3297 bytes
icons/darkredNG/skinIcons/timerInactive.png | Bin 0 -> 1527 bytes
icons/darkredNG/skinIcons/timerRecording.png | Bin 0 -> 531 bytes
icons/darkredNG/skinIcons/tracks.png | Bin 0 -> 2674 bytes
icons/darkredNG/skinIcons/txtoff.png | Bin 0 -> 3783 bytes
icons/darkredNG/skinIcons/txton.png | Bin 0 -> 4012 bytes
icons/darkredNG/skinIcons/vdrlogo.png | Bin 0 -> 12123 bytes
icons/default/extraIcons/Applikationen.png | Bin 0 -> 2073 bytes
icons/default/extraIcons/Audio.png | Bin 0 -> 2674 bytes
.../extraIcons/Aufnahmen-Liste aktualisieren.png | Bin 0 -> 3550 bytes
icons/default/extraIcons/Dienstprogramme.png | Bin 0 -> 1581 bytes
icons/default/extraIcons/FireFox.png | Bin 0 -> 3359 bytes
icons/default/extraIcons/Info.png | Bin 0 -> 2138 bytes
icons/default/extraIcons/Internet.png | Bin 0 -> 3801 bytes
icons/default/extraIcons/Medien.png | Bin 0 -> 3009 bytes
icons/default/extraIcons/Rechner neu starten.png | Bin 0 -> 2886 bytes
icons/default/extraIcons/Remote wakeup.png | Bin 0 -> 859 bytes
icons/default/extraIcons/Spiele.png | Bin 0 -> 2993 bytes
icons/default/extraIcons/System herunterfahren.png | Bin 0 -> 2713 bytes
icons/default/extraIcons/System.png | Bin 0 -> 3227 bytes
icons/default/extraIcons/Tools.png | Bin 0 -> 2355 bytes
icons/default/extraIcons/Tunderbird.png | Bin 0 -> 3544 bytes
.../USB Massenspeicher sicher entfernen.png | Bin 0 -> 2019 bytes
icons/default/extraIcons/VDR neu starten.png | Bin 0 -> 2577 bytes
icons/default/extraIcons/Video.png | Bin 0 -> 2276 bytes
icons/default/extraIcons/Web.png | Bin 0 -> 3930 bytes
icons/default/extraIcons/XBMC.png | Bin 0 -> 3336 bytes
icons/default/extraIcons/Xterm.png | Bin 0 -> 1575 bytes
icons/default/extraIcons/audiovideo.png | Bin 0 -> 2765 bytes
icons/default/extraIcons/markad_status.png | Bin 0 -> 2865 bytes
icons/default/extraIcons/schneiden_abbrechen.png | Bin 0 -> 3420 bytes
icons/default/extraIcons/tux.png | Bin 0 -> 3852 bytes
icons/default/extraIcons/usb.png | Bin 0 -> 1438 bytes
icons/default/extraIcons/vdrlogo.png | Bin 0 -> 12796 bytes
icons/default/extraIcons/yaicon_blue.png | Bin 0 -> 1931 bytes
icons/default/menuIcons/CAM.png | Bin 0 -> 1619 bytes
icons/default/menuIcons/Channels.png | Bin 20699 -> 3561 bytes
icons/default/menuIcons/Commands.png | Bin 17893 -> 2428 bytes
icons/default/menuIcons/DVB.png | Bin 0 -> 2758 bytes
icons/default/menuIcons/EPG.png | Bin 0 -> 2874 bytes
icons/default/menuIcons/LNB.png | Bin 0 -> 3739 bytes
icons/default/menuIcons/Miscellaneous.png | Bin 0 -> 1576 bytes
icons/default/menuIcons/OSD.png | Bin 0 -> 1577 bytes
icons/default/menuIcons/Plugins.png | Bin 0 -> 2230 bytes
icons/default/menuIcons/Recording.png | Bin 0 -> 1115 bytes
icons/default/menuIcons/Recordings.png | Bin 22050 -> 3640 bytes
icons/default/menuIcons/Replay.png | Bin 0 -> 1059 bytes
icons/default/menuIcons/Restart.png | Bin 0 -> 2577 bytes
icons/default/menuIcons/Schedule.png | Bin 21843 -> 2056 bytes
icons/default/menuIcons/Setup.png | Bin 20218 -> 3179 bytes
icons/default/menuIcons/StopRecording.png | Bin 0 -> 547 bytes
icons/default/menuIcons/StopReplay.png | Bin 0 -> 1595 bytes
icons/default/menuIcons/Timers.png | Bin 21615 -> 4113 bytes
icons/default/pluginIcons/admin.png | Bin 23314 -> 2355 bytes
icons/default/pluginIcons/arghdirector.png | Bin 0 -> 1824 bytes
icons/default/pluginIcons/autostart.png | Bin 0 -> 3320 bytes
icons/default/pluginIcons/avahi4vdr.png | Bin 0 -> 3734 bytes
icons/default/pluginIcons/avards.png | Bin 0 -> 665 bytes
icons/default/pluginIcons/block.png | Bin 0 -> 1341 bytes
icons/default/pluginIcons/burn.png | Bin 0 -> 4233 bytes
icons/default/pluginIcons/cdplayer.png | Bin 0 -> 2258 bytes
icons/default/pluginIcons/chanman.png | Bin 0 -> 3224 bytes
icons/default/pluginIcons/check.png | Bin 0 -> 2141 bytes
icons/default/pluginIcons/conflictcheckonly.png | Bin 0 -> 3050 bytes
icons/default/pluginIcons/ddci.png | Bin 0 -> 2876 bytes
icons/default/pluginIcons/devstatus.png | Bin 0 -> 3159 bytes
icons/default/pluginIcons/dummydevice.png | Bin 0 -> 2035 bytes
icons/default/pluginIcons/duplicates.png | Bin 0 -> 2485 bytes
icons/default/pluginIcons/dvbapi.png | Bin 0 -> 2869 bytes
icons/default/pluginIcons/dvbhddevice.png | Bin 0 -> 3175 bytes
icons/default/pluginIcons/dvbsddevice.png | Bin 0 -> 3588 bytes
icons/default/pluginIcons/dynamite.png | Bin 0 -> 3973 bytes
icons/default/pluginIcons/eepg.png | Bin 0 -> 3590 bytes
icons/default/pluginIcons/epg2vdr.png | Bin 0 -> 4051 bytes
icons/default/pluginIcons/epgsearch.png | Bin 0 -> 3228 bytes
icons/default/pluginIcons/epgsearchonly.png | Bin 0 -> 2983 bytes
icons/default/pluginIcons/epgsync.png | Bin 0 -> 3518 bytes
icons/default/pluginIcons/externalplayer.png | Bin 0 -> 2449 bytes
icons/default/pluginIcons/extrecmenu.png | Bin 0 -> 2323 bytes
icons/default/pluginIcons/favorites.png | Bin 0 -> 1375 bytes
icons/default/pluginIcons/femon.png | Bin 0 -> 3331 bytes
icons/default/pluginIcons/fepg.png | Bin 0 -> 2406 bytes
icons/default/pluginIcons/filebrowser.png | Bin 0 -> 1463 bytes
icons/default/pluginIcons/fritzbox.png | Bin 0 -> 1931 bytes
icons/default/pluginIcons/graphlcd.png | Bin 0 -> 1421 bytes
icons/default/pluginIcons/graphtft.png | Bin 0 -> 1421 bytes
icons/default/pluginIcons/image.png | Bin 0 -> 2559 bytes
icons/default/pluginIcons/imonlcd.png | Bin 0 -> 1421 bytes
icons/default/pluginIcons/iptv.png | Bin 0 -> 2774 bytes
icons/default/pluginIcons/lcdproc.png | Bin 0 -> 1421 bytes
icons/default/pluginIcons/mailbox.png | Bin 0 -> 1904 bytes
icons/default/pluginIcons/makemkv.png | Bin 0 -> 1941 bytes
icons/default/pluginIcons/markad.png | Bin 0 -> 2865 bytes
icons/default/pluginIcons/mlist.png | Bin 0 -> 2505 bytes
icons/default/pluginIcons/music.png | Bin 0 -> 2674 bytes
icons/default/pluginIcons/noepg.png | Bin 0 -> 3355 bytes
icons/default/pluginIcons/nordlichtsepg.png | Bin 0 -> 2643 bytes
icons/default/pluginIcons/osdteletext.png | Bin 14735 -> 1591 bytes
icons/default/pluginIcons/peer.png | Bin 0 -> 4175 bytes
icons/default/pluginIcons/play.png | Bin 0 -> 1059 bytes
icons/default/pluginIcons/pvrinput.png | Bin 0 -> 1976 bytes
icons/default/pluginIcons/quickepgsearch.png | Bin 0 -> 4781 bytes
icons/default/pluginIcons/radio.png | Bin 0 -> 2016 bytes
icons/default/pluginIcons/remote.png | Bin 0 -> 3807 bytes
icons/default/pluginIcons/remotetimers.png | Bin 0 -> 4372 bytes
icons/default/pluginIcons/rssreader.png | Bin 0 -> 2620 bytes
icons/default/pluginIcons/sc.png | Bin 0 -> 2208 bytes
icons/default/pluginIcons/screenshot.png | Bin 0 -> 2526 bytes
icons/default/pluginIcons/seduatmo.png | Bin 0 -> 2024 bytes
icons/default/pluginIcons/skyselectfeeds.png | Bin 0 -> 2852 bytes
icons/default/pluginIcons/sleeptimer.png | Bin 0 -> 4694 bytes
icons/default/pluginIcons/softhddevice.png | Bin 0 -> 2410 bytes
icons/default/pluginIcons/streamdev-server.png | Bin 0 -> 2821 bytes
icons/default/pluginIcons/systeminfo.png | Bin 0 -> 1709 bytes
icons/default/pluginIcons/targavfd.png | Bin 0 -> 1421 bytes
icons/default/pluginIcons/trayopenng.png | Bin 0 -> 1077 bytes
icons/default/pluginIcons/tvguide.png | Bin 22966 -> 2129 bytes
icons/default/pluginIcons/tvm2vdr.png | Bin 0 -> 2622 bytes
icons/default/pluginIcons/tvscraper.png | Bin 0 -> 2726 bytes
icons/default/pluginIcons/undelete.png | Bin 0 -> 2947 bytes
icons/default/pluginIcons/weatherng.png | Bin 0 -> 1726 bytes
icons/default/pluginIcons/xmltv2vdr.png | Bin 0 -> 2985 bytes
icons/default/pluginIcons/yaepghg.png | Bin 0 -> 2129 bytes
icons/default/skinElements/buttonblue.png | Bin 0 -> 13973 bytes
icons/default/skinElements/buttongreen.png | Bin 0 -> 14537 bytes
icons/default/skinElements/buttonred.png | Bin 0 -> 13011 bytes
icons/default/skinElements/buttonyellow.png | Bin 0 -> 13919 bytes
icons/default/skinElements/channellogoback.png | Bin 0 -> 35436 bytes
icons/default/skinElements/displaychannelback.png | Bin 0 -> 324403 bytes
.../skinElements/displaychannelback_right.png | Bin 0 -> 321190 bytes
icons/default/skinElements/displaychanneltop.png | Bin 0 -> 8987 bytes
.../skinElements/displaychanneltop_right.png | Bin 0 -> 9959 bytes
icons/default/skinElements/displayreplayback.png | Bin 0 -> 321112 bytes
icons/default/skinElements/displayreplaytop.png | Bin 0 -> 4881 bytes
icons/default/skinElements/displayvolume.png | Bin 0 -> 58704 bytes
icons/default/skinElements/header_mirroredtop.png | Bin 0 -> 5449 bytes
icons/default/skinElements/headertop.png | Bin 0 -> 5295 bytes
icons/default/skinElements/menubutton.png | Bin 0 -> 9360 bytes
icons/default/skinElements/menubuttonactive.png | Bin 0 -> 11656 bytes
icons/default/skinElements/menubuttondefault.png | Bin 0 -> 60910 bytes
.../skinElements/menubuttondefaultactive.png | Bin 0 -> 64422 bytes
icons/default/skinElements/menubuttontop.png | Bin 0 -> 3772 bytes
icons/default/skinElements/messageError.png | Bin 0 -> 114302 bytes
icons/default/skinElements/messageInfo.png | Bin 0 -> 120782 bytes
icons/default/skinElements/messageStatus.png | Bin 0 -> 120430 bytes
icons/default/skinElements/messageWarning.png | Bin 0 -> 116747 bytes
icons/default/skinElements/scrollbar.png | Bin 0 -> 11893 bytes
icons/default/skinIcons/Channelseparator.png | Bin 0 -> 36555 bytes
icons/default/skinIcons/DiskUsage.png | Bin 0 -> 4404 bytes
icons/default/skinIcons/ac3.png | Bin 0 -> 2684 bytes
icons/default/skinIcons/activetimer.png | Bin 0 -> 1731 bytes
icons/default/skinIcons/activetimersmall.png | Bin 0 -> 833 bytes
icons/default/skinIcons/arrowLeftChannelSep.png | Bin 0 -> 11625 bytes
icons/default/skinIcons/arrowRightChannelSep.png | Bin 0 -> 10951 bytes
icons/default/skinIcons/channeldelimiter.png | Bin 0 -> 4688 bytes
icons/default/skinIcons/crypted.png | Bin 0 -> 721 bytes
icons/default/skinIcons/daydelimiter.png | Bin 0 -> 2785 bytes
icons/default/skinIcons/defaultPoster.png | Bin 0 -> 1586 bytes
icons/default/skinIcons/discpercent.png | Bin 0 -> 3369 bytes
icons/default/skinIcons/dolbyoff.png | Bin 0 -> 1791 bytes
icons/default/skinIcons/dolbyon.png | Bin 0 -> 1792 bytes
icons/default/skinIcons/encrypted.png | Bin 0 -> 957 bytes
icons/default/skinIcons/fta.png | Bin 0 -> 1641 bytes
icons/default/skinIcons/fwd.png | Bin 0 -> 11503 bytes
icons/default/skinIcons/fwdInactive.png | Bin 0 -> 12656 bytes
icons/default/skinIcons/fwdx1.png | Bin 0 -> 13093 bytes
icons/default/skinIcons/fwdx2.png | Bin 0 -> 13094 bytes
icons/default/skinIcons/fwdx3.png | Bin 0 -> 13010 bytes
icons/default/skinIcons/hd1080i.png | Bin 0 -> 2259 bytes
icons/default/skinIcons/hd1080i_rec.png | Bin 0 -> 2259 bytes
icons/default/skinIcons/hd720p.png | Bin 0 -> 2299 bytes
icons/default/skinIcons/hd720p_rec.png | Bin 0 -> 2299 bytes
icons/default/skinIcons/newrecording.png | Bin 0 -> 2815 bytes
icons/default/skinIcons/pause.png | Bin 0 -> 4959 bytes
icons/default/skinIcons/pauseInactive.png | Bin 0 -> 6329 bytes
icons/default/skinIcons/play.png | Bin 0 -> 10550 bytes
icons/default/skinIcons/playInactive.png | Bin 0 -> 10871 bytes
icons/default/skinIcons/radio.png | Bin 0 -> 2188 bytes
icons/default/skinIcons/recfolder.png | Bin 0 -> 2423 bytes
icons/default/skinIcons/recoff.png | Bin 0 -> 2543 bytes
icons/default/skinIcons/recon.png | Bin 0 -> 2776 bytes
icons/default/skinIcons/recordingcutted.png | Bin 0 -> 2007 bytes
icons/default/skinIcons/recordingdatetime.png | Bin 0 -> 1349 bytes
icons/default/skinIcons/rew.png | Bin 0 -> 12275 bytes
icons/default/skinIcons/rewInactive.png | Bin 0 -> 13211 bytes
icons/default/skinIcons/rewx1.png | Bin 0 -> 13588 bytes
icons/default/skinIcons/rewx2.png | Bin 0 -> 13660 bytes
icons/default/skinIcons/rewx3.png | Bin 0 -> 13970 bytes
icons/default/skinIcons/sd576i.png | Bin 0 -> 2363 bytes
icons/default/skinIcons/sd576i_rec.png | Bin 0 -> 2363 bytes
icons/default/skinIcons/stereo.png | Bin 0 -> 4433 bytes
icons/default/skinIcons/stereooff.png | Bin 0 -> 1944 bytes
icons/default/skinIcons/stereoon.png | Bin 0 -> 1609 bytes
icons/default/skinIcons/timerActive.png | Bin 0 -> 3297 bytes
icons/default/skinIcons/timerInactive.png | Bin 0 -> 1527 bytes
icons/default/skinIcons/timerRecording.png | Bin 0 -> 531 bytes
icons/default/skinIcons/tracks.png | Bin 0 -> 2674 bytes
icons/default/skinIcons/txtoff.png | Bin 0 -> 1216 bytes
icons/default/skinIcons/txton.png | Bin 0 -> 1214 bytes
icons/default/skinIcons/vdrlogo.png | Bin 13595 -> 12123 bytes
...ieren.png => Aufnahmen-Liste aktualisieren.png} | Bin
...ner_neu_starten.png => Rechner neu starten.png} | Bin
...png => USB Massenspeicher sicher entfernen.png} | Bin
.../{VDR_neu_starten.png => VDR neu starten.png} | Bin
icons/extraIcons/{xbmc.png => XBMC.png} | Bin
icons/extraIcons/{xterm.png => Xterm.png} | Bin
.../extraIcons/{AudioVideo.png => audiovideo.png} | Bin
icons/green/menuIcons/Commands.png | Bin 19176 -> 16525 bytes
icons/green/menuIcons/Setup.png | Bin 22272 -> 19621 bytes
icons/green/pluginIcons/admin.png | Bin 24309 -> 21658 bytes
icons/green/skinElements/channellogoback.png | Bin 0 -> 16556 bytes
icons/green/skinIcons/Channelseparator.png | Bin 0 -> 19300 bytes
icons/green/skinIcons/DiskUsage.png | Bin 24797 -> 22164 bytes
icons/green/skinIcons/arrowLeftChannelSep.png | Bin 0 -> 1797 bytes
icons/green/skinIcons/arrowRightChannelSep.png | Bin 0 -> 1845 bytes
icons/green/skinIcons/daydelimiter.png | Bin 24430 -> 21779 bytes
icons/green/skinIcons/fwd.png | Bin 20142 -> 17491 bytes
icons/green/skinIcons/fwdx1.png | Bin 0 -> 17514 bytes
icons/green/skinIcons/fwdx2.png | Bin 0 -> 17657 bytes
icons/green/skinIcons/fwdx3.png | Bin 0 -> 17831 bytes
icons/green/skinIcons/pause.png | Bin 17060 -> 14409 bytes
icons/green/skinIcons/play.png | Bin 18711 -> 16060 bytes
icons/green/skinIcons/rew.png | Bin 20000 -> 17349 bytes
icons/green/skinIcons/rewx1.png | Bin 0 -> 17341 bytes
icons/green/skinIcons/rewx2.png | Bin 0 -> 17470 bytes
icons/green/skinIcons/rewx3.png | Bin 0 -> 17642 bytes
icons/green/skinIcons/tracks.png | Bin 29986 -> 27353 bytes
icons/green/skinIcons/vdrlogo.png | Bin 0 -> 13023 bytes
icons/iceblue/extraIcons/Applikationen.png | Bin 0 -> 9372 bytes
icons/iceblue/extraIcons/Audio.png | Bin 0 -> 10244 bytes
.../extraIcons/Aufnahmen-Liste aktualisieren.png | Bin 0 -> 9707 bytes
icons/iceblue/extraIcons/Dienstprogramme.png | Bin 0 -> 8383 bytes
icons/iceblue/extraIcons/FireFox.png | Bin 0 -> 11172 bytes
icons/iceblue/extraIcons/Info.png | Bin 0 -> 8781 bytes
icons/iceblue/extraIcons/Internet.png | Bin 0 -> 10529 bytes
icons/iceblue/extraIcons/Medien.png | Bin 0 -> 10883 bytes
icons/iceblue/extraIcons/Rechner neu starten.png | Bin 0 -> 8835 bytes
icons/iceblue/extraIcons/Remote wakeup.png | Bin 0 -> 8676 bytes
icons/iceblue/extraIcons/Spiele.png | Bin 0 -> 9439 bytes
icons/iceblue/extraIcons/System herunterfahren.png | Bin 0 -> 8754 bytes
icons/iceblue/extraIcons/System.png | Bin 0 -> 9788 bytes
icons/iceblue/extraIcons/Tools.png | Bin 0 -> 9496 bytes
icons/iceblue/extraIcons/Tunderbird.png | Bin 0 -> 10264 bytes
.../USB Massenspeicher sicher entfernen.png | Bin 0 -> 8862 bytes
icons/iceblue/extraIcons/VDR neu starten.png | Bin 0 -> 8832 bytes
icons/iceblue/extraIcons/Video.png | Bin 0 -> 9617 bytes
icons/iceblue/extraIcons/Web.png | Bin 0 -> 9452 bytes
icons/iceblue/extraIcons/XBMC.png | Bin 0 -> 8840 bytes
icons/iceblue/extraIcons/Xterm.png | Bin 0 -> 9032 bytes
icons/iceblue/extraIcons/audiovideo.png | Bin 0 -> 9771 bytes
icons/iceblue/extraIcons/markad_status.png | Bin 0 -> 8761 bytes
icons/iceblue/extraIcons/schneiden_abbrechen.png | Bin 0 -> 8814 bytes
icons/iceblue/extraIcons/tux.png | Bin 0 -> 8594 bytes
icons/iceblue/extraIcons/usb.png | Bin 0 -> 8378 bytes
icons/iceblue/extraIcons/vdrlogo.png | Bin 0 -> 9494 bytes
icons/iceblue/extraIcons/yaicon_blue.png | Bin 0 -> 7553 bytes
icons/iceblue/menuIcons/CAM.png | Bin 0 -> 9258 bytes
icons/iceblue/menuIcons/Channels.png | Bin 0 -> 9648 bytes
icons/iceblue/menuIcons/Commands.png | Bin 0 -> 7827 bytes
icons/iceblue/menuIcons/DVB.png | Bin 0 -> 7486 bytes
icons/iceblue/menuIcons/EPG.png | Bin 0 -> 10148 bytes
icons/iceblue/menuIcons/LNB.png | Bin 0 -> 8259 bytes
icons/iceblue/menuIcons/Miscellaneous.png | Bin 0 -> 11142 bytes
icons/iceblue/menuIcons/OSD.png | Bin 0 -> 9821 bytes
icons/iceblue/menuIcons/Plugins.png | Bin 0 -> 8921 bytes
icons/iceblue/menuIcons/Recording.png | Bin 0 -> 10028 bytes
icons/iceblue/menuIcons/Recordings.png | Bin 0 -> 10526 bytes
icons/iceblue/menuIcons/Replay.png | Bin 0 -> 9994 bytes
icons/iceblue/menuIcons/Restart.png | Bin 0 -> 8835 bytes
icons/iceblue/menuIcons/Schedule.png | Bin 0 -> 9793 bytes
icons/iceblue/menuIcons/Setup.png | Bin 0 -> 9788 bytes
icons/iceblue/menuIcons/StopRecording.png | Bin 0 -> 8308 bytes
icons/iceblue/menuIcons/StopReplay.png | Bin 0 -> 8268 bytes
icons/iceblue/menuIcons/Timers.png | Bin 0 -> 9962 bytes
icons/iceblue/pluginIcons/arghdirector.png | Bin 0 -> 8964 bytes
icons/iceblue/pluginIcons/autostart.png | Bin 0 -> 8778 bytes
icons/iceblue/pluginIcons/avahi4vdr.png | Bin 0 -> 9106 bytes
icons/iceblue/pluginIcons/avards.png | Bin 0 -> 7100 bytes
icons/iceblue/pluginIcons/block.png | Bin 0 -> 9813 bytes
icons/iceblue/pluginIcons/burn.png | Bin 0 -> 9192 bytes
icons/iceblue/pluginIcons/cdplayer.png | Bin 0 -> 8993 bytes
icons/iceblue/pluginIcons/chanman.png | Bin 0 -> 9970 bytes
icons/iceblue/pluginIcons/check.png | Bin 0 -> 9377 bytes
icons/iceblue/pluginIcons/conflictcheckonly.png | Bin 0 -> 9592 bytes
icons/iceblue/pluginIcons/ddci.png | Bin 0 -> 9857 bytes
icons/iceblue/pluginIcons/devstatus.png | Bin 0 -> 9840 bytes
icons/iceblue/pluginIcons/ding1.png | Bin 0 -> 9586 bytes
icons/iceblue/pluginIcons/dummydevice.png | Bin 0 -> 7581 bytes
icons/iceblue/pluginIcons/duplicates.png | Bin 0 -> 9375 bytes
icons/iceblue/pluginIcons/dvbhddevice.png | Bin 0 -> 9843 bytes
icons/iceblue/pluginIcons/dvbsddevice.png | Bin 0 -> 10254 bytes
icons/iceblue/pluginIcons/dynamite.png | Bin 0 -> 9881 bytes
icons/iceblue/pluginIcons/eepg.png | Bin 0 -> 9605 bytes
icons/iceblue/pluginIcons/epgsearch.png | Bin 0 -> 10044 bytes
icons/iceblue/pluginIcons/epgsearchonly.png | Bin 0 -> 8984 bytes
icons/iceblue/pluginIcons/epgsync.png | Bin 0 -> 9588 bytes
icons/iceblue/pluginIcons/externalplayer.png | Bin 0 -> 8759 bytes
icons/iceblue/pluginIcons/extrecmenu.png | Bin 0 -> 9786 bytes
icons/iceblue/pluginIcons/favorites.png | Bin 0 -> 9585 bytes
icons/iceblue/pluginIcons/femon.png | Bin 0 -> 9708 bytes
icons/iceblue/pluginIcons/fepg.png | Bin 0 -> 11472 bytes
icons/iceblue/pluginIcons/filebrowser.png | Bin 0 -> 9513 bytes
icons/iceblue/pluginIcons/fritzbox.png | Bin 0 -> 10477 bytes
icons/iceblue/pluginIcons/graphlcd.png | Bin 0 -> 8924 bytes
icons/iceblue/pluginIcons/graphtft.png | Bin 0 -> 8594 bytes
icons/iceblue/pluginIcons/image.png | Bin 0 -> 10949 bytes
icons/iceblue/pluginIcons/imonlcd.png | Bin 0 -> 9977 bytes
icons/iceblue/pluginIcons/iptv.png | Bin 0 -> 10145 bytes
icons/iceblue/pluginIcons/lcdproc.png | Bin 0 -> 9793 bytes
icons/iceblue/pluginIcons/mailbox.png | Bin 0 -> 9122 bytes
icons/iceblue/pluginIcons/markad.png | Bin 0 -> 8761 bytes
icons/iceblue/pluginIcons/mlist.png | Bin 0 -> 10433 bytes
icons/iceblue/pluginIcons/music.png | Bin 0 -> 10574 bytes
icons/iceblue/pluginIcons/noepg3.png | Bin 0 -> 9934 bytes
icons/iceblue/pluginIcons/osdteletext.png | Bin 0 -> 7355 bytes
icons/iceblue/pluginIcons/pvrinput.png | Bin 0 -> 8992 bytes
icons/iceblue/pluginIcons/quickepgsearch.png | Bin 0 -> 9985 bytes
icons/iceblue/pluginIcons/radio.png | Bin 0 -> 9213 bytes
icons/iceblue/pluginIcons/remote.png | Bin 0 -> 8811 bytes
icons/iceblue/pluginIcons/remotetimers.png | Bin 0 -> 10352 bytes
icons/iceblue/pluginIcons/rssreader.png | Bin 0 -> 8608 bytes
icons/iceblue/pluginIcons/sc.png | Bin 0 -> 10771 bytes
icons/iceblue/pluginIcons/screenshot.png | Bin 0 -> 9281 bytes
icons/iceblue/pluginIcons/seduatmo.png | Bin 0 -> 7751 bytes
icons/iceblue/pluginIcons/skyselect.png | Bin 0 -> 7929 bytes
icons/iceblue/pluginIcons/sleeptimer.png | Bin 0 -> 9462 bytes
icons/iceblue/pluginIcons/softhddevice.png | Bin 0 -> 9512 bytes
icons/iceblue/pluginIcons/streamdev-server.png | Bin 0 -> 9470 bytes
icons/iceblue/pluginIcons/systeminfo.png | Bin 0 -> 10486 bytes
icons/iceblue/pluginIcons/targavfd.png | Bin 0 -> 10224 bytes
icons/iceblue/pluginIcons/trayopenng.png | Bin 0 -> 7626 bytes
icons/iceblue/pluginIcons/tvguide.png | Bin 0 -> 10176 bytes
icons/iceblue/pluginIcons/tvm2vdr.png | Bin 0 -> 8093 bytes
icons/iceblue/pluginIcons/undelete.png | Bin 0 -> 11150 bytes
icons/iceblue/pluginIcons/weatherng.png | Bin 0 -> 7850 bytes
icons/iceblue/pluginIcons/xml2vdr.png | Bin 0 -> 9214 bytes
icons/iceblue/skinIcons/Channelseparator.png | Bin 0 -> 9430 bytes
icons/iceblue/skinIcons/DiskUsage.png | Bin 0 -> 21325 bytes
icons/iceblue/skinIcons/ac3.png | Bin 0 -> 7710 bytes
icons/iceblue/skinIcons/activetimer.png | Bin 0 -> 5224 bytes
icons/iceblue/skinIcons/activetimersmall.png | Bin 0 -> 2621 bytes
.../skinIcons/channelsymbols.png | Bin
icons/iceblue/skinIcons/daydelimiter.png | Bin 0 -> 13494 bytes
icons/iceblue/skinIcons/encrypted.png | Bin 0 -> 4002 bytes
icons/{ => iceblue}/skinIcons/fwd.png | Bin 18838 -> 16191 bytes
icons/iceblue/skinIcons/fwdInactive.png | Bin 0 -> 8735 bytes
icons/iceblue/skinIcons/newrecording.png | Bin 0 -> 2978 bytes
icons/{ => iceblue}/skinIcons/pause.png | Bin 15668 -> 13021 bytes
icons/iceblue/skinIcons/pauseInactive.png | Bin 0 -> 6507 bytes
icons/{ => iceblue}/skinIcons/play.png | Bin 17112 -> 14465 bytes
icons/iceblue/skinIcons/playInactive.png | Bin 0 -> 7409 bytes
icons/iceblue/skinIcons/recordingcutted.png | Bin 0 -> 4764 bytes
icons/iceblue/skinIcons/recordingdatetime.png | Bin 0 -> 7344 bytes
icons/iceblue/skinIcons/recordingfolder.png | Bin 0 -> 14387 bytes
icons/{ => iceblue}/skinIcons/rew.png | Bin 18552 -> 15905 bytes
icons/iceblue/skinIcons/rewInactive.png | Bin 0 -> 8484 bytes
icons/iceblue/skinIcons/signal.png | Bin 0 -> 2436 bytes
icons/iceblue/skinIcons/stereo.png | Bin 0 -> 13955 bytes
icons/iceblue/skinIcons/timerActive.png | Bin 0 -> 35529 bytes
icons/iceblue/skinIcons/timerInactive.png | Bin 0 -> 52583 bytes
icons/{ => iceblue}/skinIcons/timerRecording.png | Bin 7320 -> 7296 bytes
icons/iceblue/skinIcons/tracks.png | Bin 0 -> 18164 bytes
icons/iceblue/skinIcons/vdrlogo.png | Bin 0 -> 11813 bytes
icons/iceblue/skinIcons/yavdrlogo.png | Bin 0 -> 8249 bytes
icons/light/menuIcons/Channels.png | Bin 0 -> 3385 bytes
icons/light/menuIcons/Commands.png | Bin 0 -> 3915 bytes
icons/light/menuIcons/Recordings.png | Bin 0 -> 2604 bytes
icons/light/menuIcons/Schedule.png | Bin 0 -> 3468 bytes
icons/light/menuIcons/Setup.png | Bin 0 -> 5201 bytes
icons/light/menuIcons/Timers.png | Bin 0 -> 4265 bytes
icons/light/skinIcons/Channelseparator.png | Bin 0 -> 4889 bytes
icons/light/skinIcons/DiskUsage.png | Bin 0 -> 5085 bytes
icons/light/skinIcons/ac3.png | Bin 0 -> 4000 bytes
icons/light/skinIcons/activetimer.png | Bin 0 -> 1939 bytes
icons/light/skinIcons/activetimersmall.png | Bin 0 -> 1010 bytes
icons/light/skinIcons/arrowLeftChannelSep.png | Bin 0 -> 1559 bytes
icons/light/skinIcons/arrowRightChannelSep.png | Bin 0 -> 1621 bytes
icons/light/skinIcons/channeldelimiter.png | Bin 0 -> 3236 bytes
icons/light/skinIcons/channelsymbols.png | Bin 0 -> 2903 bytes
icons/light/skinIcons/crypted.png | Bin 0 -> 721 bytes
icons/light/skinIcons/encrypted.png | Bin 0 -> 1307 bytes
icons/light/skinIcons/fta.png | Bin 0 -> 1641 bytes
icons/light/skinIcons/fwd.png | Bin 0 -> 9618 bytes
icons/light/skinIcons/fwdInactive.png | Bin 0 -> 8735 bytes
icons/light/skinIcons/fwdx1.png | Bin 0 -> 9650 bytes
icons/light/skinIcons/fwdx2.png | Bin 0 -> 9731 bytes
icons/light/skinIcons/fwdx3.png | Bin 0 -> 9871 bytes
icons/light/skinIcons/hd1080i.png | Bin 0 -> 2259 bytes
icons/light/skinIcons/hd1080i_rec.png | Bin 0 -> 2259 bytes
icons/light/skinIcons/hd720p.png | Bin 0 -> 2299 bytes
icons/light/skinIcons/hd720p_rec.png | Bin 0 -> 2299 bytes
icons/light/skinIcons/newrecording.png | Bin 0 -> 1436 bytes
icons/light/skinIcons/pause.png | Bin 0 -> 7858 bytes
icons/light/skinIcons/pauseInactive.png | Bin 0 -> 6507 bytes
icons/light/skinIcons/play.png | Bin 0 -> 8776 bytes
icons/light/skinIcons/playInactive.png | Bin 0 -> 7409 bytes
icons/light/skinIcons/recfolder.png | Bin 0 -> 2489 bytes
icons/light/skinIcons/recoff.png | Bin 0 -> 4024 bytes
icons/light/skinIcons/recon.png | Bin 0 -> 4194 bytes
icons/light/skinIcons/recordingcutted.png | Bin 0 -> 1733 bytes
icons/light/skinIcons/recordingdatetime.png | Bin 0 -> 1188 bytes
icons/light/skinIcons/rew.png | Bin 0 -> 9672 bytes
icons/light/skinIcons/rewInactive.png | Bin 0 -> 8484 bytes
icons/light/skinIcons/rewx1.png | Bin 0 -> 9647 bytes
icons/light/skinIcons/rewx2.png | Bin 0 -> 9735 bytes
icons/light/skinIcons/rewx3.png | Bin 0 -> 9823 bytes
icons/light/skinIcons/rss.png | Bin 0 -> 3214 bytes
icons/light/skinIcons/sd576i.png | Bin 0 -> 2363 bytes
icons/light/skinIcons/sd576i_rec.png | Bin 0 -> 2363 bytes
icons/light/skinIcons/stereo.png | Bin 0 -> 4793 bytes
icons/light/skinIcons/stereooff.png | Bin 0 -> 1944 bytes
icons/light/skinIcons/stereoon.png | Bin 0 -> 1609 bytes
icons/light/skinIcons/timerActive.png | Bin 0 -> 3210 bytes
icons/light/skinIcons/timerInactive.png | Bin 0 -> 4192 bytes
icons/light/skinIcons/timerRecording.png | Bin 0 -> 2469 bytes
icons/light/skinIcons/tracks.png | Bin 0 -> 1267 bytes
icons/light/skinIcons/txtoff.png | Bin 0 -> 1216 bytes
icons/light/skinIcons/txton.png | Bin 0 -> 1214 bytes
icons/light/skinIcons/vdrlogo.png | Bin 0 -> 485 bytes
icons/pluginIcons/Thumbs.db | Bin 260096 -> 0 bytes
icons/pluginIcons/dvbhddevice.png | Bin 0 -> 20367 bytes
icons/pluginIcons/dvbsddevice.png | Bin 0 -> 21356 bytes
icons/pluginIcons/graphtft.png | Bin 0 -> 16637 bytes
icons/pluginIcons/nordlichtsepg.png | Bin 0 -> 17857 bytes
icons/pluginIcons/undelete.png | Bin 0 -> 22452 bytes
icons/pluginIcons/weatherng.png | Bin 0 -> 18203 bytes
icons/skinIcons/Channelseparator.png | Bin 15388 -> 28668 bytes
icons/skinIcons/DiskUsage.png | Bin 24156 -> 21325 bytes
icons/skinIcons/arrowLeftChannelSep.png | Bin 0 -> 1768 bytes
icons/skinIcons/arrowRightChannelSep.png | Bin 0 -> 1855 bytes
icons/skinIcons/channeldelimiter.png | Bin 0 -> 23999 bytes
icons/skinIcons/crypted.png | Bin 0 -> 4580 bytes
icons/skinIcons/daydelimiter.png | Bin 23206 -> 20612 bytes
icons/skinIcons/defaultPoster.png | Bin 0 -> 6224 bytes
icons/skinIcons/discpercent.png | Bin 2996 -> 3369 bytes
icons/skinIcons/dolbyoff.png | Bin 0 -> 2776 bytes
icons/skinIcons/dolbyon.png | Bin 0 -> 3004 bytes
icons/skinIcons/fta.png | Bin 0 -> 3679 bytes
icons/skinIcons/fwd.png | Bin 18838 -> 16191 bytes
icons/skinIcons/fwdInactive.png | Bin 13549 -> 8735 bytes
icons/skinIcons/fwdx1.png | Bin 0 -> 16234 bytes
icons/skinIcons/fwdx2.png | Bin 0 -> 16374 bytes
icons/skinIcons/fwdx3.png | Bin 0 -> 16548 bytes
icons/skinIcons/hd1080i.png | Bin 6268 -> 2252 bytes
icons/skinIcons/hd1080i_rec.png | Bin 0 -> 2252 bytes
icons/skinIcons/hd720p.png | Bin 6105 -> 2265 bytes
icons/skinIcons/hd720p_rec.png | Bin 0 -> 2265 bytes
icons/skinIcons/pause.png | Bin 15668 -> 13021 bytes
icons/skinIcons/pauseInactive.png | Bin 11793 -> 6507 bytes
icons/skinIcons/play.png | Bin 17112 -> 14465 bytes
icons/skinIcons/playInactive.png | Bin 12415 -> 7409 bytes
icons/skinIcons/radio.png | Bin 6506 -> 2274 bytes
icons/skinIcons/recfolder.png | Bin 0 -> 16364 bytes
icons/skinIcons/recoff.png | Bin 0 -> 4451 bytes
icons/skinIcons/recon.png | Bin 0 -> 6307 bytes
icons/skinIcons/rew.png | Bin 18552 -> 15905 bytes
icons/skinIcons/rewInactive.png | Bin 13451 -> 8484 bytes
icons/skinIcons/rewx1.png | Bin 0 -> 15930 bytes
icons/skinIcons/rewx2.png | Bin 0 -> 16086 bytes
icons/skinIcons/rewx3.png | Bin 0 -> 16269 bytes
icons/skinIcons/sd576i.png | Bin 6717 -> 2384 bytes
icons/skinIcons/sd576i_rec.png | Bin 0 -> 2384 bytes
icons/skinIcons/stereooff.png | Bin 0 -> 3697 bytes
icons/skinIcons/stereoon.png | Bin 0 -> 4151 bytes
icons/skinIcons/timerRecording.png | Bin 7320 -> 7296 bytes
icons/skinIcons/tracks.png | Bin 29537 -> 26636 bytes
icons/skinIcons/txtoff.png | Bin 0 -> 3180 bytes
icons/skinIcons/txton.png | Bin 0 -> 4283 bytes
icons/skinIcons/vdrlogo.png | Bin 13206 -> 11727 bytes
imagecache.c | 679 ++++++++++++
imagecache.h | 113 ++
imageloader.c | 214 ++--
imageloader.h | 19 +-
imagemagickwrapper.c | 162 +++
imagemagickwrapper.h | 28 +
imagescaler.c | 149 +++
imagescaler.h | 97 ++
logoconverter/backgrounds/bg1.png | Bin 0 -> 20140 bytes
logoconverter/backgrounds/bg2.png | Bin 0 -> 20750 bytes
logoconverter/backgrounds/bg3.png | Bin 0 -> 19740 bytes
logoconverter/backgrounds/bg4.png | Bin 0 -> 16556 bytes
logoconverter/backgrounds/fg1.png | Bin 0 -> 37758 bytes
logoconverter/backgrounds/fg2.png | Bin 0 -> 34711 bytes
logoconverter/backgrounds/fg3.png | Bin 0 -> 28053 bytes
logoconverter/backgrounds/fg4.png | Bin 0 -> 19010 bytes
logoconverter/make_background.sh | 33 +
menudetailview.c | 733 ++++---------
menudetailview.h | 117 +-
menuitem.c | 1093 +++++++++++++------
menuitem.h | 76 +-
nopacity.c | 199 +---
nopacity.h | 10 +-
po/ca_ES.po | 702 ++++++++++++
po/de_DE.po | 424 ++++++--
po/it_IT.po | 418 ++++++--
po/sk_SK.po | 584 ++++++----
screenResSetup/skinnopacity-hdready.txt | 143 +++
screenResSetup/skinnopacity-sd.txt | 144 +++
services/remotetimers.h | 2 +-
services/scraper2vdr.h | 196 ++++
setup.c | 565 +++++-----
setup.h | 40 +-
skinnopacity.c | 81 +-
textwindow.c | 439 +++++++-
textwindow.h | 41 +-
themes/nOpacity-anthra.theme | 97 ++
themes/nOpacity-blue.theme | 90 ++
themes/nOpacity-darkblue.theme | 53 +-
themes/nOpacity-darkgrey.theme | 90 ++
themes/nOpacity-darkred.theme | 69 +-
...city-darkred.theme => nOpacity-darkredNG.theme} | 55 +-
themes/nOpacity-default.theme | 90 ++
themes/nOpacity-green.theme | 52 +-
themes/nOpacity-iceblue.theme | 90 ++
themes/nOpacity-light.theme | 90 ++
timers.c | 392 ++++---
timers.h | 83 +-
1079 files changed, 11748 insertions(+), 4272 deletions(-)
diff --git a/HISTORY b/HISTORY
index b67dddd..2ed2537 100644
--- a/HISTORY
+++ b/HISTORY
@@ -186,3 +186,251 @@ Version 0.1.1
to avoid nasty font pixelation effect
- changed tracks display to fixed track item height
- changed stereo and ac3 icons in tracks display
+- Added RSS Feed support
+- Fixed crash on initial startup with xine plugin as output device
+- Fixed crash / hang if menu is opened with small screen size
+- Background of ChannelDisplay configurable also to cover channel logo
+- Added standalone RSS Feed
+- check for Slash at end of startup path parameters
+- changed scaling of EPG info window font size
+- Added and changed some icons
+
+Version 0.1.2
+- changed some color settings and icons in theme darkred
+- added option "auto" for video scaling: with this option the video window
+ is resized when the detailed EPG Window is displayed in Schedules and
+ Recordings menu to be completely visible.
+- Added Channel Number in narrow Timer menu
+- Added display of next Schedules in Channel Menu in separate Info Window.
+ The Number of displayed Schedules can be configured in Plugin Channels
+ Menu Setup.
+- Display of disc status in main menu configurable: either remaining recording
+ time in hours or free disc space in GB is displayed
+- Fixed a bug that slow motion trick speed during recording replay was not
+ displayed
+- Added previous and next Channel Group in Channel Display
+- Introduced "plain" style without any blending effects configurable by
+ dedicated theme color
+- Added theme "iceblue" based on the introduced plain display style
+- Fixed display of recording duration in recordings menu when a cut is
+ running in the background
+- Additional information in channels menu configurable: choice between
+ transponder information and current schedule
+- Added optional dedicated status icons in channel display
+- Added optional display of channel source information in channel display
+- Fixed a bug if switching to a invalid channel
+
+Version 0.1.3
+- Added TVScraper support, if TVScraper is used scraped images are
+ displayed in various EPG views
+
+Version 0.1.4
+- changed service interface for tvscraper
+- fixed an possible uninitialised variable in recordings menu
+- fixed a bug that epg info is not displayed in schedules menu if fade
+ in is set to zero
+- fixed a bug that poster or banner is not displayed in displayChannel
+ if fade in is set to zero
+- Added setup option in detailed EPG view and in detailed recordings view
+ to select if additional EPG pictures are shown if tvscraper media
+ is available
+- Added Deadlock Patch
+- Changed default Channelseparator Icon (closes Bug 1412)
+- Display correct recording date even if recording info is empty (closes Bug 1448)
+- Added option to display plain channels and EPG information without time in
+ channels menu (closes Feature 1377)
+- Added name of search timer which created recording in detailed recording
+ information (closes Feature 1401)
+- Added channel number in display of reruns in detailed EPG view
+ (closes Feature 1402)
+- Changed display of trick speed in displayReplay (closes Feature 1433)
+- Improved display of channel separators (closes tickets 1477 and 1482)
+- Added REC Icon in displayChannel for current and next event (closes
+ Feature 1403)
+- Display stereo symbol in displayChannel if at least one mpeg track
+ is available (and not two, closes Feature 1404)
+- Added script and background images to create fancy channel logos with
+ theme dependend background
+- searching channel logos first in <logopath>/theme, then in
+ <defaltlogopath>/theme, then in <logopath> and finally in <defaultlogopath>
+ to allow theme dependend channel logos
+- if no channel logo is found for channel name, the ChannelID is used to allow
+ logos for (feed) channels with changing names. Analog to the channel name
+ the ChannelID is also converted to lower case letters.
+- added exemplarily setup options for SD and HDReady
+- introduced dedicated theme font colors for different message types and
+ different buttons (closes Feature 1462)
+- dedicated theme colors in display channel for current event, current event
+ info, next evet and next event info (closes Feature 1466)
+- dedicated theme colors for timer backgrounds in main menu (closes Feature
+ 1463)
+- dedicated theme colors for RSS Feed (closes Feature 1485)
+- added event length in header in detailed EPG and recording view (closes
+ Feature 1469)
+- added separate configurable border around detailed epg view and detailed
+ recording view
+- new "fullscreen" display mode in narrow schedules and recordings view. If
+ fullscreen mode is configured in plugin setup, the right area next to the
+ list of events /recordings is completely used to display immeditately the
+ detailed information of the selected event / recording.
+- added some rounded corners (if activated in setup) for posters and banners
+- added rounded corners for message display
+- fixed issue with gradient display for newer imagemagick versions
+- added setup option to display poster or fanart in channel display
+- possibility to set manual poster for recordings. This manual poster has to
+ be named as "cover_vdr.jpg" and has to be placed directly in the recording
+ folder. For series it is also possible to place a common poster for all
+ series in a folder two or three directories above the actual recording
+ folders. If a manual poster is found, all tvscraper information is ignored.
+- changed narrow recordings menu style
+- improved function to float text around poster in textwindow
+- fixed nasty font pixelation with non blending themes for timer display in
+ main menu
+- optimized some theme colors in displaychannel and displaymessage
+- display of channel logo in main menu timer display configurable
+- fixed a bug that progress bar is too long for too long schedules
+- if background color and blending color in displayChannel and displayReplay
+ are the same, no blending effect is shown
+- updated slovak translation
+- Added cache for images and fonts
+- Changed and added some color definitions
+- Added theme "Keep it light" (thanks @Saman for providing the theme)
+- Added additional configurable channel logo cache
+- Fixed a bug that running instant recording is not displayed in
+ displayChannel
+- Configurable Menu Item Scroll Mode: "Carriage Return" or "Forward and
+ Back again"
+- channel logo cache is built with channelID as key (not with channelNumber
+ anymore)
+- Removed RSS Feed support completely, maybe this will get a standalone
+ plugin in the future
+- Implemented theme dependend configuration. Each theme has now it's own
+ configuration. Default configurations for each theme can be set in the
+ appropriate conf/theme-themename.conf file. This file has to be placed
+ in <PLGCONFDIR>/themeconfigs. With that each theme can be shipped with
+ its individual settings and the plugin settings can be changed
+ individually for each theme without affecting other themes.
+- All skin background and button elements can now be individual PNGs. For
+ that the config value displayType has to be set to the value 2 in the
+ theme specific configuration.
+- Added new Theme "freestyle" with individual graphics for the different
+ skin elements.
+- Rewriting and cleanup of displayChannel:
+ - separated drawing code in dedicated class
+ - removed "simple" status icon bar, now only graphical icons are supported
+ - changed screen resolution icon to same height but 3 times larger width
+ as other status icons.
+ - status icons scale to size of footer height
+ - fixed bug that progress bar sometimes was not displayed when switching
+ - adapted the status icons for the different themes
+ the channel
+- Cleaned up pixmaps in menuitems
+- Avoided font pixelation on default menu items
+- Searching for epgimages named eventID.jpg and eventID_0.jpg in detailed
+ epg view
+- Fixed clearing pixmap in displaychannel if no epg is available
+- Changed display of channel groups in displaychannel
+- Added configurable transparency for channeldisplay background
+- Added background with dedicated theme color for status icons in
+ displaychannel
+- Added background with dedicated theme color for channel logos in menus
+- Improved Display of Poster or Banner in displaychannel
+- implemented cDisplayChannel::SetMessage()
+- display not selectable menu elements with dedicated font color
+- changed way of calculating number of menu items in narrow menus. This
+ value is not calculated by icon sizes anymore, these values are now
+ configurable via plugin setup menu. The number of menu items in
+ schedules menu also sets the number of menu items in channels and
+ timers menu.
+- improved display of text progress bar in wide menus
+- changed header icons to scale automatically
+- Added Setup Option to generate log messages when trying to load
+ pictures (VDR Menu -> Common Settings)
+- Added complete date for events longer than one day in the future
+ in schedules menu
+- changed build environment that every class is build seperately
+ (thanks @Helmut Auer)
+- changed channel logos in main menu timers display to scale
+ automatically
+- fixed a bug that rounded corners of color buttons in menus were
+ not drawn correctly
+- added possibility to add background image in freestyle themes
+ in displaymenu header (headerback.png, header_mirroredback.png)
+- fixed timer display in main menu so that setting "small without logo"
+ uses correct height
+- size of channel logos in main menu timers display configurable as
+ percent of timer width
+- Added theme dependend background for status icon in displayreplay
+- Fixed editing of text if text is scrolling (closes Bug 1572)
+- Cutting too long recording name in displayreplay
+- implemented GraphicsMagick compatibility (thanks @Manuel Reimer
+ for providing the patch)
+- changed Makefile to support both ImageMagick and GraphicsMagick
+ (configurable in Makefile)
+- updated slovakian translation
+- Added EPG Info in narrow Timers Menu
+- Freestyle Theme new default theme, old default renamed to "blue"
+- Changed Disc Usage Icon for default theme
+- Added logo backgrounds in displaychannel also for blended themes
+- Usage of channel logo background in displaychannel and on
+ menuelements configurable via plugin setup
+- Fixed a bug that setup values are not stored if theme is changed
+
+Version 1.0.0
+
+- improved image scaling by using internal scaling libary from
+ Nikolaus Meine (thanks @Soeren Moch for providing the patch)
+- fixed a crash with dvb cards which deliver negative signal values
+- added theme darkredNG
+- updated ca_es po file
+
+Version 1.0.1
+
+- fixed a bug in cImageLoader::FirstImageInFolder()
+- added more Exception Handling for Image Loading
+- fixed a crash for recordings without valid title in info file
+- darkened borders of menubuttons and scrollbar in theme darkredNG
+
+Version 1.0.2
+
+- Extended image loading logging only if activated in setup
+- Fixed a possible crash if recording directory is no longer available
+
+Version 1.0.3
+
+- Fixed bugs that configured OSD top and left values are not correctly
+ used in DisplayChannel, DisplayTracks, DisplayVolume and
+ DisplayMessages (closes Tickets 1659 and 1696)
+- Fixed a bug with xine as output plugin that VDR crashes if xine plugin
+ gets closed (closes Ticket 1675)
+- Fixed bug that messages are not displayed during replay of a recording
+ if DisplayReplay is active (closes Ticket 1698)
+- Added information about running recordings in DisplayChannel (thanks
+ @Soeren Moch for providing a patch)
+
+Version 1.1.0
+
+- Added scraper2vdr support
+
+Version 1.1.1
+
+- Fixed a crash if no images exists for a movie
+- Only display poster in detailed EPG View if really available
+- Only display poster in detailed recordings view
+- fixed crash in detailed epg view
+
+Version 1.1.2
+
+- Restructured detailed EPG and recordings view
+- fixed naming of reruns tab when displaying recordings
+- scroll speed with up / down configurable (lines per click)
+- fixed bug that floating text is not shown completely
+- cleaned up and restructured setup menu
+
+Version 1.1.3
+
+- Vertical channel logo alignment configurable in displaychannel
+- added dedicated background pixmap in detailview
+- added support for tvscraper again, tvscraper Version 0.2.0 needed
+- fixed possible division by zero
+- updated theme darkred
diff --git a/Makefile b/Makefile
index e2c14ad..dcee31e 100644
--- a/Makefile
+++ b/Makefile
@@ -3,6 +3,9 @@
#
# $Id$
+# External image lib to use: imagemagick, graphicsmagick
+IMAGELIB = imagemagick
+
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
# By default the main source file also carries this name.
@@ -48,17 +51,20 @@ SOFILE = libvdr-$(PLUGIN).so
### Includes and Defines and Dependencies (add further entries here):
-INCLUDES += $(shell pkg-config --cflags-only-I Magick++)
-
DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
-DEFINES += -DMAGICKCORE_HDRI_ENABLE=0
-DEFINES += -DMAGICKCORE_QUANTUM_DEPTH=16
-LIBS += $(shell pkg-config --libs Magick++)
+ifeq ($(IMAGELIB), imagemagick)
+ INCLUDES += $(shell pkg-config --cflags Magick++)
+ LIBS += $(shell pkg-config --libs Magick++)
+else ifeq ($(IMAGELIB), graphicsmagick)
+ INCLUDES += $(shell pkg-config --cflags GraphicsMagick++)
+ LIBS += $(shell pkg-config --libs GraphicsMagick++)
+endif
### The object files (add further files here):
-OBJS = $(PLUGIN).o
+OBJS = $(PLUGIN).o config.o detailview.o displaychannel.o displaymenu.o displaymenuview.o displaymessage.o displayreplay.o displaytracks.o displayvolume.o displaychannelview.o fontmanager.o \
+ geometrymanager.o imagecache.o imagemagickwrapper.o imagescaler.o helpers.o imageloader.o menudetailview.o menuitem.o nopacity.o setup.o textwindow.o timers.o
### The main target:
@@ -120,7 +126,11 @@ install-icons:
mkdir -p $(DESTDIR)$(PLGRESDIR)/icons
cp -r icons/* $(DESTDIR)$(PLGRESDIR)/icons
-install: install-lib install-i18n install-themes install-icons
+install-themeconfigs:
+ mkdir -p $(DESTDIR)$(VDRCONFDIR)/plugins/$(PLUGIN)/themeconfigs
+ cp conf/theme-* $(DESTDIR)$(VDRCONFDIR)/plugins/$(PLUGIN)/themeconfigs
+
+install: install-lib install-i18n install-themes install-icons install-themeconfigs
dist: $(I18Npo) clean
@-rm -rf $(TMPDIR)/$(ARCHIVE)
diff --git a/README b/README
index 76c6b9d..c584a62 100644
--- a/README
+++ b/README
@@ -17,7 +17,8 @@ Requirements
- VDR version >= 1.7.34
-- Installed ImageMagick for displaying png/jpg Icons, Channel Logos and EPG Images
+- Installed ImageMagick or GraphicsMagick for displaying png/jpg Icons, Channel Logos
+ and EPG Images
- for scaling the video picture to fit into the VDR menu window please use
softhddevice plugin revision 87c1c7be (2013-01-01) or newer.
@@ -52,7 +53,12 @@ or vdr.pc).
During a "make install" the Icons are automatically copied from <SkinSourceDirectory>/icons/
to the default path. Included Theme files are also copied from <SkinSourceDirectory>/themes/
to <ConfigDirectory>/themes/
-
+
+Additionally with a "make install" also the theme specific configuration files
+(see chapter "Theme specific configurations" below) are copied automatically
+from <SkinSourceDirectory>/conf/ to the plugin config directory
+(<VDRConfigDir>/plugins/skinnopacity/themeconfigs).
+
I recommend to use channel logos from https://github.com/3PO/Senderlogos
To download them just change in the directory you want to place the logos
and do a:
@@ -70,13 +76,19 @@ package maintainer or distributor in parallel.
For S2-6400 Users: Disable High Level OSD, otherwise the plugin will not be
loaded because lack of true color support
+For Xine-Plugin Users: Set "Blend scaled Auto" as OSD display mode to achieve
+an suitable true color OSD.
+
+For Xineliboutput Users: Start vdr-sxfe with the --hud option enabled
+
Usage
-----
After installation first activate then skin in the VDR OSD menu. nOpacity scales to
every screen resolution, but in lower resolutions than 1920 * 1080 it may be necessary
to change some default settings for dimensions and font sizes to achieve the best result
-(see "setup options" below).
+(see "setup options" below). In the folder "screenResSetup" in the plugin source directory
+exemplarily setup options for SD and HDReady resolutions are provided.
nOpacity respects the OSD settings for OSD top, left, width and height. If these values
are not set to top&left: 0, width&height: 100, you'll get a border around every displayed
@@ -100,19 +112,79 @@ immediately after placing the channel logos in the correct place. So if you have
the name of a channel logo (may be by inserting a space or a hyphen) so that it fits to
the channel name, only use lower case letters, and not the name of the channel with upper
and lower letters as displayed inside VDR.
+If no logo is found for the channel name, additionally a search for a logo named as the
+ChannelID is performed. Analog to the channel name the ChannelID is also converted to lower
+case letters. This allows channel logos for channels with changing names (for instance
+Sky Feed Channels).
Additional hint: some channels have slashes in their name (in germany nick/comedy for instance).
In this example, as a dirty hack just create a folder in your channel logo directory named
"nick" and place an image named "comedy.png" inside this folder.
-Themes and theme specific Icons
--------------------------------
+In the folder "logoconverter" a script and some backgrounds are provided to create logos
+with fancy backgrounds from the transparent logos. Before running the script, just adapt the
+config variables in the header of the script according to your needs. If you place the newly
+created logos in a subfolder of your logo directory named exactly as the used Theme name,
+nOpacity uses these logos only for the appropriate theme automatically.
+
+Themes, Theme types, Theme specific Configurations and Icons
+------------------------------------------------------------
+
+nOpacity is fully themable with different "theme types". Examples for theme files with all
+possible color settings are included in <SkinSourceDirectory>/themes/. As already mentioned
+these themes are automatically copied during a "make install" into the VDR themes directory
+and can be choosed in VDRs OSD setup menu.
+
+The following skin characteristics are theme dependend:
+- theme default configuration
+- theme configuration
+- theme colors
+- graphical skin elements (for "graphical" themes, see below)
+- theme icons and images
+
+Theme types:
+............
+
+nOpacity supports three different theme types named "flat", "blending" and "graphical". This
+type can be set with the config option "displayType" (flat: displayType = 0, blending:
+displayType = 1, graphical: displayType = 2) which has to be provided via the theme specific
+configuration file (see below). If this value is not provided by the theme designer, the default
+value "blending" is used.
+
+flat style: "basic" skin type with almost no effects, areas are just filled with plain colors
+blended style: skin elemements like menu items are drawn with a main and a blended color which
+are provided via the color theme file, skin elements are drawn with a blended effect.
+graphical style: almost all skin elements are drawn by using dedicated PNG images. These PNGs
+have to be placed in the <themename>/skinElements/ icon directory. See the default theme for
+examples for this style and the used images.
+
+Theme specific configuration:
+.............................
+
+Because the "look&feel" of nOpacity is strongly dependend of the choosen setup configuration
+options.
+
+On the one hand it is possible for the theme designer to provide a dedicated default
+config for every theme. This theme configuration has to be named "theme-<themename>.conf" and
+has to be placed in <VDRConfigDir>/plugins/skinnopacity/themeconfigs. As already mentioned all
+theme configs which are available in the skin source directory <SkinSourceDirectory>/conf/ are
+copied automatically to the destination directory with a "make install". The syntax for this
+theme configuration file is just straight forward a "configoption = value" per line. The possible
+configuration options and the default values can be checked in the file config.c in the function
+cNopacityConfig::LoadDefaults(void).
+
+On the other hand, all configuration changes done by the user are only valid for the currently
+choosen theme. That means that every theme has it's individual configuration. If the theme is
+changed via the VDR Setup/OSD Menu, the configuration for this theme is loaded in the following way:
+
+- first the general default settings from cNopacityConfig::LoadDefaults() are used
+- after that the settings from the theme config file (if available) are looked up, every available
+ config option in this file replaces the default config option
+- after that the settings the user has individually customized are used and replace the corresponding
+ default settings
+
+Theme specific icons and images:
+................................
-nOpacity is fully themable. Examples for theme files with all possible color settings are
-included in <SkinSourceDirectory>/themes/. As already mentioned these themes are automatically
-copied during a "make install" into the VDR themes directory and can be choosed in VDRs
-OSD setup menu.
-
-Beside colors also the icons and images shown in the different menus are theme dependend.
Icons and images are first looked up in <IconPath>/<ThemeName>/. If there is no appropriate
icon found, <IconPath>/ is used. With that it is possible to use specific icons for every
different theme.
@@ -124,6 +196,25 @@ Two types of icons are used:
has to be named as the plugin name so that the appropriate icon will be shown in the
main menu.
+Image Caching
+-------------
+
+nOpacity uses an image cache to achieve best performance also on systems with low performance.
+The image cache loads all necessary images (icons, skin elements, channel logos) at startup and
+also after a change in screen resolution or leaving the nOpacity setup menu. Depending on the
+system hardware and the configured number of channel logos to cache (see below) this cache reload
+can need some seconds.
+
+In the plugin setup menu in the submenu "image caching" it is possible to configure the number of
+channel logos to be cached at startup and the maximum number of channel logos to cache. Channel logos
+are always cached in the order the channels appear in your channels.conf file. If you configure for
+example to cache 50 logos and you set the maximum number of logos to 100, the logos for the first 50
+channels in your channels.conf are cached at startup. If logos from channels 51 - 100 are needed,
+the image is created once, all further requests for that logo are fulfilled by the cache. Logos for
+channels > 100 are not cached and are always created from the source PNGs on your storage medium.
+
+In the "image cache" setup sub menu the current cache usage for the different types of images and the
+memory used is displayed as additional information.
Customizing, Skin Setup Options
-------------------------------
@@ -134,19 +225,25 @@ Customizing, Skin Setup Options
* VDR menu: Common Settings:
+- Create Log Messages for image loading: show log message for each image loading process. Usefull
+ for debugging, but causes many log entries
- Number of Default Menu Entries: Number of menu items for the default menu view.
- Adjust Font Size - Default Menu Item
- Adjustment of narrow menus: the narrow menus (main, schedules, channels, timers,
setup) can either be adjusted left or right.
-- Scale Video size to fit into menu window
+- Scale Video size to fit into menu window: no / yes / auto: with "auto" the video window is resized
+ when the detailed EPG Window is displayed in Schedules and Recordings menu to be completely visible.
- Header Height (% of OSD Height): Default: 7%
- Header Icon Size (Square Header Menu Icons)
- Footer Height (% of OSD Height): Default: 7%
- Rounded Corners for menu items and buttons
- Radius of rounded corners: if rounded corners are used, radius in px.
+- Use Channel Logo background: display theme specific background (clrMenuChannelLogoBack) for channel
+ logos in menus what's on now / next, channels, timers
- Fade-In Time in ms (Zero for switching off fading): Default 0, active fading
for main menu caused sometimes trouble in some special setups. Activate on
own risk ;)
+- Menu Items Scroll Style: "Carriage Return" after scrolling is complete, or "Forward and Back again"
- Menu Items Scrolling Speed
- Menu Items Scrolling Delay in s: period which menu element has to be selected
till scrolling starts
@@ -165,33 +262,34 @@ Customizing, Skin Setup Options
- Width (Percent of OSD Width): if displayed narrow, width of this menu
- Use narrow setup menu: display setup menu in narrow or standard style
- Width (Percent of OSD Width): if displayed narrow, width of this menu
-- Use menu icons
- - Icon Size (Square): if icons are used, size of the icons. Even if no icons
- are used, the height of the menu items is determinated by this value.
+- Number of entires per page: number of menu items shown per screen
+- Use menu icons: yes/no
+- Main menu title style: way how VDR version in menu header is displayed:
+ "VDR" plus VDR version, only VDR version, no title
- Display Disk Usage: Display Disk Usage in Main Menu
- Size (square, Percent of OSD Width)
+ - Free Disc Display: free time in hours (estimated) or free disc space in GB
- Adjust Font Size - free
- Adjust Font Size - percent
-- Display Timers: Display active Tiers in Main Menu
- - Width of Timers (Percent of OSD Width)
- - Channel Logo Width (at the top of the timers displayed in main menu)
- - Channel Logo Height (at the top of the timers displayed in main menu)
+- Display Timers: Display active Timers in Main Menu: "yes", "small without channel
+ logos", "no"
+ - Maximum number of timers to show in main menu
+ - Width of Timers (% of OSD Width)
+ - Width of channel logos (% of timers width)
- Adjust Font Size - Header
- Adjust Font Size - Title
- Show Timer Conflicts
-- Header Logo Width: Default 104px
-- Header Logo Height: Default 78px
+- Header Logo Width / Height: Header Logo is scaled to fit into the header, these
+ values are used for correct scaling
- Adjust Font Size - Menu Items
* VDR Menu: Schedules Menu
- Use narrow menu: display menu in narrow or standard style
- Width (Percent of OSD Width): if displayed narrow, width of this menu
-- Channel Logo Width (Menu Buttons): width of channel logos shown in scheduling
- "what's on" and "what's next" menus and channels menu.
-- Channel Logo Height (Menu Buttons): height of channel logos shown in scheduling
- "what's on" and "what's next" menus and channels menu. This size determinates
- the number of menu entries in schedules and channels menu.
+- Number of entires per page
+- Mode of EPG Window: "small window" with settings for fade in and scroll speed / delay
+ or "full screen"
- EPG Window Fade-In Time in ms (Zero for switching off fading)
- EPG Window Display Delay in s: period which schedules menu element has to be
selected till fade in of epg window starts
@@ -199,6 +297,7 @@ Customizing, Skin Setup Options
window text starts to scroll
- Height of EPG Info Window (Percent of OSD Height): Height of text window which
is shown for schedules menu elements
+- Border around detailed EPG view: border to be displayed in detailed EPG view
- Display Reruns in detailed EPG View: via epgsearch service
- Number of reruns to display: Default 5
- Use Subtitle for reruns
@@ -206,8 +305,6 @@ Customizing, Skin Setup Options
EPG pictures will be shown at the end of the detailed EPG view. The pictures have
to be named as eventid_number.jpg with number from 1 to 9.
- Number of EPG pictures to display
-- Detail EPG View Logo Width: Default 260px
-- Detail EPG View Logo Height: Default 200px
- Detail EPG View EPG Image Width: Default 210px
- Detail EPG View EPG Image Height: Default 160px
- Detail EPG View additional EPG Image Width: Default: 525 px
@@ -215,11 +312,22 @@ Customizing, Skin Setup Options
- Adjust Font Size - Menu Item
- Adjust Font Size - Menu Item Small
- Adjust Font Size - EPG Info Window
+- Adjust Font Size - EPG Info Window Header
* VDR Menu: Channels Menu
- Use narrow menu: display menu in narrow or standard style
- Width (Percent of OSD Width): if displayed narrow, width of this menu
+- Menu Items display mode: Transponder Information / Current Schedule / None
+ - If "Current Schedule": Schedules with time information
+- Number of EPG Entries in Schedules Info Window
+- Adjust Font Size - Menu Item
+- Adjust Font Size - Menu Item Small
+
+* VDR Menu: Timers Menu
+
+- Use narrow menu: display menu in narrow or standard style
+ - Width (Percent of OSD Width): if displayed narrow, width of this menu
- Adjust Font Size - Menu Item
- Adjust Font Size - Menu Item Small
@@ -227,11 +335,15 @@ Customizing, Skin Setup Options
- Use narrow menu: display menu in narrow or standard style
- Width (Percent of OSD Width): if displayed narrow, width of this menu
+- Number of entires per page
+- Mode of recording Window: window / full screen
+- Border around detailed recording view: analogue to "detailed EPG Info"
- Display additional EPG Pictures in detailed recording View: if set to yes, additional
pictures will be shown at the end of the detailed recording view. All jpegs in the
recording directory will be used.
- Number of EPG pictures to display
-- Folder Icon Size: size of the folder image used in recordings list
+- Use folder poster if available: use folder poster provided by tvscraper
+- Width / Height of manually set recording poster: used for correct scaling
- Adjust Font Size - Menu Item
- Adjust Font Size - Menu Item Small
@@ -241,20 +353,30 @@ Customizing, Skin Setup Options
- Height of Channel Display (% of OSD Height): Default 25%
- Left & Right Border Width: Default 15px
- Bottom Border Height: Default 15px
+- Background Transparency in Percent: for graphical themes, sets transparency of background
+- Background Style: only for non graphical themes, transparent logo background or not
- Channel Logo Position: left / right / do not display. If set to "do not display",
the whole screen width is used for channel display.
- - Channel Logo Width: Default 260px
- - Channel Logo Height: Default 200px
- - Channel Logo Border: Default 15px
+ - Channel Logo original Width: Default 260px (used for correct scaling)
+ - Channel Logo original Height: Default 200px (used for correct scaling)
+ - Use Channel Logo background: use theme specific image (skinElements/channellogoback.png)
+ as backgrond image for channel logos
+- Kind of time display for current schedule: elapsed or remaining time
+- Display Source Information: display Channel Source Information (used Satelite)
- Display Signal Strength & Quality: Set this to Zero if you want to disable the
display of signal strength & quality (for instance if your dvb drivers does not
deliver this values)
-- Screen Resolution Icon Size: Default 100px
-- Status Icon Size: Default 64px
+- Display Poster or Fanart from TVScraper
+ - Border in px around poster / fanart
+- Display previous and next Channel Group
- Adjust Font Size - Header: Font for Channel / Channelgroup Name
- Adjust Font Size - Date
- Adjust Font Size - EPG Text
- Adjust Font Size - EPG Infotext
+- Adjust Font Size - Channel Source Info
+- Adjust Font Size - Channel Group
+- Adjust Font Size - Next/Prev Channel Group
+
* Replay:
@@ -305,3 +427,7 @@ Customizing, Skin Setup Options
Remark: the volume display is always positioned in the center of the screen,
with bottom border it can be moved to the top.
- Adjust Font Size
+
+
+Legal Remark: some of the menu icons used in this skin are from http://icons8.com/
+Thanks @icons8.com for provide these icons for free.
diff --git a/conf/theme-anthra.conf b/conf/theme-anthra.conf
new file mode 100644
index 0000000..af3f680
--- /dev/null
+++ b/conf/theme-anthra.conf
@@ -0,0 +1,31 @@
+displayType = 2
+channelBackgroundTransparency = 0
+menuWidthRecordings = 30
+logoVerticalAlignment = 1
+channelFadeTime = 0
+debugImageLoading = 1
+displayPoster = 0
+displaySignalStrength = 0
+displaySourceInfo = 0
+fontChannelDateSize = 7
+fontChannelHeaderSize = 1
+fontEPGSize = 4
+fontEPGSmallSize = 2
+fontMenuitemChannel = 5
+fontMenuitemLarge = 5
+headerHeight = 7
+mainMenuTitleStyle = 2
+menuChannelDisplayMode = 2
+menuEPGWindowFadeTime = 0
+narrowRecordingMenu = 0
+narrowScheduleMenu = 0
+narrowTimerMenu = 0
+numEPGEntriesChannelsMenu = 1
+showDiscUsage = 0
+showTimers = 0
+fontChannelDateSize = 8
+mainMenuTitleStyle = 2
+menuHeaderLogoHeight = 70
+menuHeaderLogoWidth = 160
+menuChannelLogoBackground = 0
+
diff --git a/conf/theme-darkredNG.conf b/conf/theme-darkredNG.conf
new file mode 100644
index 0000000..cdd6ee9
--- /dev/null
+++ b/conf/theme-darkredNG.conf
@@ -0,0 +1,6 @@
+displayType = 2
+channelBackgroundTransparency = 10
+mainMenuTitleStyle = 1
+menuWidthRecordings = 40
+menuChannelLogoBackground = 0
+logoVerticalAlignment = 2
diff --git a/conf/theme-default.conf b/conf/theme-default.conf
new file mode 100644
index 0000000..21cf5dd
--- /dev/null
+++ b/conf/theme-default.conf
@@ -0,0 +1,5 @@
+displayType = 2
+channelBackgroundTransparency = 20
+mainMenuTitleStyle = 1
+menuWidthRecordings = 40
+logoVerticalAlignment = 2
diff --git a/conf/theme-iceblue.conf b/conf/theme-iceblue.conf
new file mode 100644
index 0000000..b2a51a2
--- /dev/null
+++ b/conf/theme-iceblue.conf
@@ -0,0 +1,2 @@
+displayType = 0
+logoVerticalAlignment = 1
diff --git a/conf/theme-light.conf b/conf/theme-light.conf
new file mode 100644
index 0000000..2338b4b
--- /dev/null
+++ b/conf/theme-light.conf
@@ -0,0 +1,39 @@
+displayType = 0
+backgroundStyle = 1
+logoVerticalAlignment = 1
+discUsageStyle = 0
+displayPoster = 0
+displaySignalStrength = 0
+displaySourceInfo = 0
+fontChannelGroupSize = 7
+fontChannelGroupSmallSize = 5
+fontDiskUsage = 13
+fontEPGInfoWindow = -2
+fontEPGSize = 3
+fontEPGSmallSize = 3
+fontHeader = 10
+fontMenuitemDefault = -14
+fontMenuitemLarge = 5
+fontTimers = -4
+fontTimersHead = -6
+footerHeight = 6
+headerHeight = 6
+mainMenuTitleStyle = 0
+menuSizeDiskUsage = 13
+menuWidthChannels = 37
+menuWidthMain = 26
+menuWidthRecordings = 37
+menuWidthRightItems = 13
+menuWidthSchedules = 37
+menuWidthSetup = 26
+menuWidthTimers = 37
+numDefaultMenuItems = 12
+numMainMenuItems = 12
+numSchedulesMenuItems = 12
+numRecordingsMenuItems = 12
+roundedCorners = 0
+scalePicture = 0
+showDiscUsage = 0
+showTimers = 2
+useFolderPoster = 0
+useMenuIcons = 0
diff --git a/config.c b/config.c
index 1c4bb94..0cf62f1 100644
--- a/config.c
+++ b/config.c
@@ -1,4 +1,9 @@
+#include <string>
+#include <vector>
+#include <map>
#include "config.h"
+#include "helpers.h"
+#include <vdr/skins.h>
cNopacityConfig::cNopacityConfig() {
logoPathSet = false;
@@ -6,320 +11,386 @@ cNopacityConfig::cNopacityConfig() {
iconPathSet = false;
//Common
mainMenuEntry = false;
- fontIndex = 0;
+ fontName = NULL;
fontDefaultName = "VDRSymbols Sans:Book";
- //DisplayChannel
- channelHeight = 25;
- channelBorderVertical = 15;
- channelBorderBottom = 15;
- channelFadeTime = 300; // ms
- logoPosition = 1;
- logoWidth = 260;
- logoHeight = 200;
logoExtension = "png";
- logoBorder = 15;
- displaySignalStrength = 1;
- fontChannelHeaderSize = 0;
- fontChannelDateSize = 0;
- fontEPGSize = 0;
- fontEPGSmallSize = 0;
- resolutionIconSize = 100;
- statusIconSize = 64;
- progressCurrentSchedule = 0;
- //Display Replay
- replayHeight = 25;
- replayBorderVertical = 15;
- replayBorderBottom = 15;
- replayFadeTime = 300; // ms
- fontReplayHeader = 0;
- fontReplay = 0;
- //DisplayMessage
- messageWidth = 90;
- messageHeight = 10;
- messageBorderBottom = 10;
- fontMessage = 0;
- messageFadeTime = 300;
- //DisplayTracks
- tracksFadeTime = 300;
- tracksWidth = 25;
- tracksItemHeight = 80;
- tracksPosition = 0;
- tracksBorderHorizontal = 10;
- tracksBorderVertical = 10;
- fontTracksHeader = 0;
- fontTracks = 0;
- //DisplayVolume
- volumeFadeTime = 300;
- volumeWidth = 40;
- volumeHeight = 10;
- volumeBorderBottom = 10;
- fontVolume = 0;
- //DisplayMenu
- menuAdjustLeft = 1;
- scalePicture = 1;
- roundedCorners = 0;
- cornerRadius = 12;
- useMenuIcons = 1;
- mainMenuTitleStyle = 0;
- narrowMainMenu = 1;
- narrowScheduleMenu = 1;
- narrowChannelMenu = 1;
- narrowTimerMenu = 1;
- narrowRecordingMenu = 1;
- narrowSetupMenu = 1;
- displayRerunsDetailEPGView = 1;
- numReruns = 5;
- useSubtitleRerun = 1;
- displayAdditionalEPGPictures = 1;
- numAdditionalEPGPictures = 9;
- displayAdditionalRecEPGPictures = 1;
- numAdditionalRecEPGPictures = 9;
- menuFadeTime = 0;
- menuEPGWindowFadeTime = 300;
- menuWidthMain = 30;
- menuWidthSchedules = 30;
- menuWidthChannels = 30;
- menuWidthTimers = 30;
- menuWidthRecordings = 30;
- menuWidthSetup = 30;
- menuHeightInfoWindow = 20;
- menuScrollDelay = 1;
- menuScrollSpeed = 2;
- menuInfoTextDelay = 2;
- menuInfoScrollDelay = 5;
- menuInfoScrollSpeed = 2;
- menuWidthRightItems = 12;
- menuSizeDiskUsage = 12;
- showDiscUsage = 1;
- showTimers = 1;
- numberTimers = 10;
- checkTimerConflict = 1;
- headerHeight = 7;
- footerHeight = 7;
- numDefaultMenuItems = 16;
- iconHeight = 100;
- headerIconHeight = 80;
- menuHeaderLogoWidth = 160;
- menuHeaderLogoHeight = 70;
- menuItemLogoWidth = 130;
- menuItemLogoHeight = 100;
- detailViewLogoWidth = 260;
- detailViewLogoHeight = 200;
- timersLogoWidth = 90;
- timersLogoHeight = 70;
- epgImageWidth = 210;
- epgImageHeight = 160;
- epgImageWidthLarge = 525;
- epgImageHeightLarge = 400;
- menuRecFolderSize = 128;
- fontHeader = 0;
- fontDate = 0;
- fontMenuitemLarge = 0;
- fontMenuitemSchedule = 0;
- fontMenuitemScheduleSmall = 0;
- fontMenuitemChannel = 0;
- fontMenuitemChannelSmall = 0;
- fontMenuitemRecordings = 0;
- fontMenuitemRecordingsSmall = 0;
- fontMenuitemTimers = 0;
- fontMenuitemTimersSmall = 0;
- fontMenuitemDefault = 0;
- fontDiskUsage = 0;
- fontDiskUsagePercent = 0;
- fontTimersHead = 0;
- fontTimers = 0;
- fontButtons = 0;
- fontMessageMenu = 0;
- fontDetailView = 0;
- fontDetailViewHeader = 0;
- fontDetailViewHeaderLarge = 0;
- fontEPGInfoWindow = 0;
+ LoadDefaults();
}
cNopacityConfig::~cNopacityConfig() {
}
-void cNopacityConfig::setDynamicValues() {
- if (fontIndex == 0) {
+int cNopacityConfig::GetValue(std::string name) {
+ std::map<std::string, int>::iterator hit = conf.find(name);
+ if (hit != conf.end()) {
+ return (int)hit->second;
+ } else {
+ dsyslog("nopacity: ERROR: access to unknown config value %s", name.c_str());
+ }
+ return 0;
+}
+
+int *cNopacityConfig::GetValueRef(std::string name) {
+ int *ref = NULL;
+ std::map<std::string, int>::iterator hit = conf.find(name);
+ if (hit != conf.end()) {
+ ref = &hit->second;
+ } else {
+ dsyslog("nopacity: ERROR: access to unknown config value %s", name.c_str());
+ }
+ return ref;
+}
+
+void cNopacityConfig::LoadDefaults(void) {
+ conf.clear();
+ //Common Values
+ conf.insert(std::pair<std::string, int>("displayType", dtBlending));
+ conf.insert(std::pair<std::string, int>("fontIndex", 0));
+ conf.insert(std::pair<std::string, int>("debugImageLoading", 0));
+ //DisplayMenu
+ conf.insert(std::pair<std::string, int>("scrollMode", 0));
+ conf.insert(std::pair<std::string, int>("spaceMenu", 5));
+ conf.insert(std::pair<std::string, int>("widthScrollbar", 20));
+ conf.insert(std::pair<std::string, int>("menuAdjustLeft", 1));
+ conf.insert(std::pair<std::string, int>("scalePicture", 1));
+ conf.insert(std::pair<std::string, int>("roundedCorners", 1));
+ conf.insert(std::pair<std::string, int>("cornerRadius", 12));
+ conf.insert(std::pair<std::string, int>("useMenuIcons", 1));
+ conf.insert(std::pair<std::string, int>("mainMenuTitleStyle", 0));
+ conf.insert(std::pair<std::string, int>("narrowMainMenu", 1));
+ conf.insert(std::pair<std::string, int>("narrowScheduleMenu", 1));
+ conf.insert(std::pair<std::string, int>("narrowChannelMenu", 1));
+ conf.insert(std::pair<std::string, int>("narrowTimerMenu", 1));
+ conf.insert(std::pair<std::string, int>("narrowRecordingMenu", 1));
+ conf.insert(std::pair<std::string, int>("narrowSetupMenu", 1));
+ conf.insert(std::pair<std::string, int>("numReruns", 5));
+ conf.insert(std::pair<std::string, int>("useSubtitleRerun", 1));
+ conf.insert(std::pair<std::string, int>("menuChannelDisplayMode", 0));
+ conf.insert(std::pair<std::string, int>("menuChannelDisplayTime", 1));
+ conf.insert(std::pair<std::string, int>("numEPGEntriesChannelsMenu", 15));
+ conf.insert(std::pair<std::string, int>("menuFadeTime", 0));
+ conf.insert(std::pair<std::string, int>("menuEPGWindowFadeTime", 300));
+ conf.insert(std::pair<std::string, int>("menuWidthMain", 30));
+ conf.insert(std::pair<std::string, int>("menuWidthSchedules", 30));
+ conf.insert(std::pair<std::string, int>("menuWidthChannels", 30));
+ conf.insert(std::pair<std::string, int>("menuWidthTimers", 30));
+ conf.insert(std::pair<std::string, int>("menuWidthRecordings", 30));
+ conf.insert(std::pair<std::string, int>("menuWidthSetup", 30));
+ conf.insert(std::pair<std::string, int>("menuHeightInfoWindow", 20));
+ conf.insert(std::pair<std::string, int>("menuScrollDelay", 1));
+ conf.insert(std::pair<std::string, int>("menuScrollSpeed", 2));
+ conf.insert(std::pair<std::string, int>("menuInfoTextDelay", 2));
+ conf.insert(std::pair<std::string, int>("menuInfoScrollDelay", 5));
+ conf.insert(std::pair<std::string, int>("menuInfoScrollSpeed", 2));
+ conf.insert(std::pair<std::string, int>("menuWidthRightItems", 12));
+ conf.insert(std::pair<std::string, int>("menuSizeDiskUsage", 12));
+ conf.insert(std::pair<std::string, int>("showDiscUsage", 1));
+ conf.insert(std::pair<std::string, int>("discUsageStyle", 0));
+ conf.insert(std::pair<std::string, int>("showTimers", 1));
+ conf.insert(std::pair<std::string, int>("numberTimers", 10));
+ conf.insert(std::pair<std::string, int>("timersLogoWidth", 60));
+ conf.insert(std::pair<std::string, int>("checkTimerConflict", 1));
+ conf.insert(std::pair<std::string, int>("headerHeight", 7));
+ conf.insert(std::pair<std::string, int>("footerHeight", 7));
+ conf.insert(std::pair<std::string, int>("numDefaultMenuItems", 16));
+ conf.insert(std::pair<std::string, int>("numMainMenuItems", 10));
+ conf.insert(std::pair<std::string, int>("numSchedulesMenuItems", 10));
+ conf.insert(std::pair<std::string, int>("numRecordingsMenuItems", 10));
+ conf.insert(std::pair<std::string, int>("menuHeaderLogoWidth", 160));
+ conf.insert(std::pair<std::string, int>("menuHeaderLogoHeight", 70));
+ conf.insert(std::pair<std::string, int>("epgImageWidth", 210));
+ conf.insert(std::pair<std::string, int>("epgImageHeight", 160));
+ conf.insert(std::pair<std::string, int>("epgImageWidthLarge", 525));
+ conf.insert(std::pair<std::string, int>("epgImageHeightLarge", 400));
+ conf.insert(std::pair<std::string, int>("posterWidth", 500));
+ conf.insert(std::pair<std::string, int>("posterHeight", 750));
+ conf.insert(std::pair<std::string, int>("useFolderPoster", 1));
+ conf.insert(std::pair<std::string, int>("menuChannelLogoBackground", 1));
+ conf.insert(std::pair<std::string, int>("borderDetailedEPG", 30));
+ conf.insert(std::pair<std::string, int>("borderDetailedRecordings", 30));
+ conf.insert(std::pair<std::string, int>("headerDetailedEPG", 20));
+ conf.insert(std::pair<std::string, int>("headerDetailedRecordings", 20));
+ conf.insert(std::pair<std::string, int>("detailedViewScrollStep", 1));
+ conf.insert(std::pair<std::string, int>("menuSchedulesWindowMode", 1));
+ conf.insert(std::pair<std::string, int>("menuRecordingsWindowMode", 1));
+ conf.insert(std::pair<std::string, int>("menuTimersWindowMode", 1));
+ conf.insert(std::pair<std::string, int>("fontHeader", 0));
+ conf.insert(std::pair<std::string, int>("fontDate", 0));
+ conf.insert(std::pair<std::string, int>("fontMenuitemLarge", 0));
+ conf.insert(std::pair<std::string, int>("fontMenuitemSchedule", 0));
+ conf.insert(std::pair<std::string, int>("fontMenuitemScheduleSmall", 0));
+ conf.insert(std::pair<std::string, int>("fontMenuitemChannel", 0));
+ conf.insert(std::pair<std::string, int>("fontMenuitemChannelSmall", 0));
+ conf.insert(std::pair<std::string, int>("fontMenuitemRecordings", 0));
+ conf.insert(std::pair<std::string, int>("fontMenuitemRecordingsSmall", 0));
+ conf.insert(std::pair<std::string, int>("fontMenuitemTimers", 0));
+ conf.insert(std::pair<std::string, int>("fontMenuitemTimersSmall", 0));
+ conf.insert(std::pair<std::string, int>("fontMenuitemDefault", 0));
+ conf.insert(std::pair<std::string, int>("fontDiskUsage", 0));
+ conf.insert(std::pair<std::string, int>("fontDiskUsagePercent", 0));
+ conf.insert(std::pair<std::string, int>("fontTimers", 0));
+ conf.insert(std::pair<std::string, int>("fontTimersHead", 0));
+ conf.insert(std::pair<std::string, int>("fontButtons", 0));
+ conf.insert(std::pair<std::string, int>("fontMessageMenu", 0));
+ conf.insert(std::pair<std::string, int>("fontDetailView", 0));
+ conf.insert(std::pair<std::string, int>("fontDetailViewSmall", 0));
+ conf.insert(std::pair<std::string, int>("fontDetailViewHeader", 0));
+ conf.insert(std::pair<std::string, int>("fontDetailViewHeaderLarge", 0));
+ conf.insert(std::pair<std::string, int>("fontEPGInfoWindow", 0));
+ conf.insert(std::pair<std::string, int>("fontEPGInfoWindowLarge", 0));
+ //DisplayChannel
+ conf.insert(std::pair<std::string, int>("channelHeight", 25));
+ conf.insert(std::pair<std::string, int>("channelBorderVertical", 15));
+ conf.insert(std::pair<std::string, int>("channelBorderBottom", 15));
+ conf.insert(std::pair<std::string, int>("channelFadeTime", 300));
+ conf.insert(std::pair<std::string, int>("channelBackgroundTransparency", 0));
+ conf.insert(std::pair<std::string, int>("channelUseLogoBackground", 1));
+ conf.insert(std::pair<std::string, int>("logoPosition", 1));
+ conf.insert(std::pair<std::string, int>("logoVerticalAlignment", 1));
+ conf.insert(std::pair<std::string, int>("logoWidth", 260));
+ conf.insert(std::pair<std::string, int>("logoHeight", 200));
+ conf.insert(std::pair<std::string, int>("logoWidthOriginal", 260));
+ conf.insert(std::pair<std::string, int>("logoHeightOriginal", 200));
+ conf.insert(std::pair<std::string, int>("backgroundStyle", 0));
+ conf.insert(std::pair<std::string, int>("roundedCornersChannel", 1));
+ conf.insert(std::pair<std::string, int>("displaySignalStrength", 1));
+ conf.insert(std::pair<std::string, int>("displaySourceInfo", 1));
+ conf.insert(std::pair<std::string, int>("displayPrevNextChannelGroup", 1));
+ conf.insert(std::pair<std::string, int>("fontChannelHeaderSize", 0));
+ conf.insert(std::pair<std::string, int>("fontChannelDateSize", 0));
+ conf.insert(std::pair<std::string, int>("fontEPGSize", 0));
+ conf.insert(std::pair<std::string, int>("fontEPGSmallSize", 0));
+ conf.insert(std::pair<std::string, int>("fontChannelSourceInfoSize", 0));
+ conf.insert(std::pair<std::string, int>("fontChannelGroupSize", 0));
+ conf.insert(std::pair<std::string, int>("fontChannelGroupSmallSize", 0));
+ conf.insert(std::pair<std::string, int>("progressCurrentSchedule", 0));
+ conf.insert(std::pair<std::string, int>("displayPoster", 1));
+ conf.insert(std::pair<std::string, int>("channelPosterBorder", 10));
+ //Display Replay
+ conf.insert(std::pair<std::string, int>("replayHeight", 25));
+ conf.insert(std::pair<std::string, int>("replayBorderVertical", 15));
+ conf.insert(std::pair<std::string, int>("replayBorderBottom", 15));
+ conf.insert(std::pair<std::string, int>("replayFadeTime", 300));
+ conf.insert(std::pair<std::string, int>("fontReplayHeader", 0));
+ conf.insert(std::pair<std::string, int>("fontReplay", 0));
+ //DisplayMessage
+ conf.insert(std::pair<std::string, int>("messageFadeTime", 300));
+ conf.insert(std::pair<std::string, int>("messageWidth", 90));
+ conf.insert(std::pair<std::string, int>("messageHeight", 10));
+ conf.insert(std::pair<std::string, int>("messageBorderBottom", 10));
+ conf.insert(std::pair<std::string, int>("fontMessage", 0));
+ //DisplayTracks
+ conf.insert(std::pair<std::string, int>("tracksFadeTime", 300));
+ conf.insert(std::pair<std::string, int>("tracksWidth", 25));
+ conf.insert(std::pair<std::string, int>("tracksItemHeight", 80));
+ conf.insert(std::pair<std::string, int>("tracksPosition", 0));
+ conf.insert(std::pair<std::string, int>("tracksBorderHorizontal", 10));
+ conf.insert(std::pair<std::string, int>("tracksBorderVertical", 10));
+ conf.insert(std::pair<std::string, int>("fontTracksHeader", 0));
+ conf.insert(std::pair<std::string, int>("fontTracks", 0));
+ //DisplayVolume
+ conf.insert(std::pair<std::string, int>("volumeFadeTime", 300));
+ conf.insert(std::pair<std::string, int>("volumeWidth", 40));
+ conf.insert(std::pair<std::string, int>("volumeHeight", 10));
+ conf.insert(std::pair<std::string, int>("volumeBorderBottom", 10));
+ conf.insert(std::pair<std::string, int>("fontVolume", 0));
+ //Channel Logo Caching
+ conf.insert(std::pair<std::string, int>("limitLogoCache", 1));
+ conf.insert(std::pair<std::string, int>("numLogosInitial", 30));
+ conf.insert(std::pair<std::string, int>("numLogosMax", 50));
+}
+
+void cNopacityConfig::SetFontName() {
+ if (fontName)
+ free(fontName);
+ if (GetValue("fontIndex") == 0) {
fontName = strdup(fontDefaultName);
} else {
cStringList availableFonts;
cFont::GetAvailableFontNames(&availableFonts);
- if (availableFonts[fontIndex-1]) {
- fontName = strdup(availableFonts[fontIndex-1]);
- } else
+ if (availableFonts[GetValue("fontIndex")-1]) {
+ fontName = strdup(availableFonts[GetValue("fontIndex")-1]);
+ } else
fontName = strdup(fontDefaultName);
}
- channelFrameTime = channelFadeTime / 10;
- replayFrameTime = replayFadeTime / 10;
- messageFrameTime = messageFadeTime / 10;
- tracksFrameTime = tracksFadeTime / 10;
- volumeFrameTime = volumeFadeTime / 10;
- menuFrameTime = menuFadeTime / 10;
- menuEPGWindowFrameTime = menuEPGWindowFadeTime / 10;
-
- menuScrollFrameTime = 0;
- if (menuScrollSpeed == 1)
- menuScrollFrameTime = 50;
- else if (menuScrollSpeed == 2)
- menuScrollFrameTime = 30;
- else if (menuScrollSpeed == 3)
- menuScrollFrameTime = 15;
-
- menuInfoScrollFrameTime = 0;
- if (menuInfoScrollSpeed == 1)
- menuInfoScrollFrameTime = 50;
- else if (menuInfoScrollSpeed == 2)
- menuInfoScrollFrameTime = 30;
- else if (menuInfoScrollSpeed == 3)
- menuInfoScrollFrameTime = 15;
-
+}
+
+void cNopacityConfig::SetPathes(void) {
logoPathDefault = cString::sprintf("%s/logos/", cPlugin::ResourceDirectory(PLUGIN_NAME_I18N));
iconPathDefault = cString::sprintf("%s/icons/", cPlugin::ResourceDirectory(PLUGIN_NAME_I18N));
epgImagePathDefault = cString::sprintf("%s/epgimages/", cPlugin::CacheDirectory(PLUGIN_NAME_I18N));
-
- dsyslog("nopacity: using Logo Directory %s", (logoPathSet)?(*logoPath):(*logoPathDefault));
- dsyslog("nopacity: using Icon Directory %s", (iconPathSet)?(*iconPath):(*iconPathDefault));
- dsyslog("nopacity: using EPG Images Directory %s", (epgImagePathSet)?(*epgImagePath):(*epgImagePathDefault));
+
+ dsyslog("nopacity: using Logo Directory %s", (logoPathSet)?(*logoPath):(*logoPathDefault));
+ dsyslog("nopacity: using Icon Directory %s", (iconPathSet)?(*iconPath):(*iconPathDefault));
+ dsyslog("nopacity: using EPG Images Directory %s", (epgImagePathSet)?(*epgImagePath):(*epgImagePathDefault));
}
void cNopacityConfig::SetLogoPath(cString path) {
- logoPath = path;
+ logoPath = checkSlashAtEnd(*path);
logoPathSet = true;
}
void cNopacityConfig::SetIconPath(cString path) {
- iconPath = path;
+ iconPath = checkSlashAtEnd(*path);
iconPathSet = true;
}
void cNopacityConfig::SetEpgImagePath(cString path) {
- epgImagePath = path;
+ epgImagePath = checkSlashAtEnd(*path);
epgImagePathSet = true;
}
+cString cNopacityConfig::checkSlashAtEnd(std::string path) {
+ try {
+ if (!(path.at(path.size()-1) == '/'))
+ return cString::sprintf("%s/", path.c_str());
+ } catch (...) {return path.c_str();}
+ return path.c_str();
+}
+
+void cNopacityConfig::LoadThemeSpecificConfigs(void) {
+ cThemes themes;
+ themes.Load("nOpacity");
+ int numThemes = themes.NumThemes();
+ dsyslog("nopacity: %d themes available", numThemes);
+ for (int theme = 0; theme < numThemes; theme++) {
+ cString confFile = cString::sprintf("%s/themeconfigs/theme-%s.conf", cPlugin::ConfigDirectory(PLUGIN_NAME_I18N), themes.Name(theme));
+ dsyslog("nopacity: trying to load theme config %s", *confFile);
+ LoadThemeConfig(confFile, themes.Name(theme));
+ }
+}
+
+void cNopacityConfig::LoadThemeConfig(cString confFile, cString theme) {
+ FILE *f = fopen(*confFile, "r");
+ if (f) {
+ dsyslog("nopacity: %s successfully loaded", *confFile);
+ std::map<std::string, int> themeConf;
+ char *line;
+ cReadLine ReadLine;
+ bool insertConf = false;
+ while ((line = ReadLine.Read(f)) != NULL) {
+ std::pair<std::string, int> themeConfLine = ReadThemeConfigLine(line);
+ std::string name = (std::string)themeConfLine.first;
+ if (name.compare("undefined") != 0) {
+ themeConf.insert(themeConfLine);
+ insertConf = true;
+ }
+ }
+ if (insertConf)
+ themeConfigDefaults.insert(std::pair<std::string, std::map<std::string, int> >(*theme, themeConf));
+ }
+}
+
+std::pair<std::string, int> cNopacityConfig::ReadThemeConfigLine(const char *line) {
+ std::pair<std::string, int> themeConf;
+ try {
+ splitstring s(line);
+ std::vector<std::string> flds = s.split('=', 0);
+ if (flds.size() == 2) {
+ std::string name = flds[0];
+ name.erase(name.find_last_not_of(" ")+1);
+ name.erase(0, name.find_first_not_of(" "));
+ int value = atoi(flds[1].c_str());
+ themeConf = std::make_pair (name,value);
+ } else {
+ themeConf = std::make_pair ("undefined",0);
+ }
+ } catch (...) {
+ themeConf = std::make_pair ("undefined",0);
+ }
+ return themeConf;
+}
+
+void cNopacityConfig::SetThemeSpecificDefaults(void) {
+ std::map<std::string, std::map<std::string, int> >::iterator themeConfHit = themeConfigDefaults.find(Setup.OSDTheme);
+ if (themeConfHit != themeConfigDefaults.end()) {
+ std::map<std::string, int> themeConf = (std::map<std::string, int>)themeConfHit->second;
+ for(std::map<std::string, int>::const_iterator it = themeConf.begin(); it != themeConf.end(); it++) {
+ std::string name = (std::string)it->first;
+ int value = (int)it->second;
+ std::map<std::string, int>::iterator origVal = conf.find(name);
+ if (origVal != conf.end()) {
+ conf.erase(origVal);
+ conf.insert(std::pair<std::string, int>(name, value));
+ } else {
+ dsyslog("nopacity: ERROR: unknown config parameter %s in default config for theme %s", name.c_str(), Setup.OSDTheme);
+ }
+ }
+ }
+}
+
+void cNopacityConfig::SetThemeSetup(void) {
+ std::map<std::string, std::map<std::string, int> >::iterator themeSetupHit = themeConfigSetup.find(Setup.OSDTheme);
+ if (themeSetupHit != themeConfigSetup.end()) {
+ std::map<std::string, int> themeSetup = (std::map<std::string, int>)themeSetupHit->second;
+ for(std::map<std::string, int>::const_iterator it = themeSetup.begin(); it != themeSetup.end(); it++) {
+ std::string name = (std::string)it->first;
+ int value = (int)it->second;
+ std::map<std::string, int>::iterator origVal = conf.find(name);
+ if (origVal != conf.end()) {
+ conf.erase(origVal);
+ conf.insert(std::pair<std::string, int>(name, value));
+ }
+ }
+ }
+}
+
bool cNopacityConfig::SetupParse(const char *Name, const char *Value) {
- if (strcmp(Name, "fontIndex") == 0) fontIndex = atoi(Value);
- else if (strcmp(Name, "channelFadeTime") == 0) channelFadeTime = atoi(Value);
- else if (strcmp(Name, "channelHeight") == 0) channelHeight = atoi(Value);
- else if (strcmp(Name, "channelBorderVertical") == 0) channelBorderVertical = atoi(Value);
- else if (strcmp(Name, "channelBorderBottom") == 0) channelBorderBottom = atoi(Value);
- else if (strcmp(Name, "logoPosition") == 0) logoPosition = atoi(Value);
- else if (strcmp(Name, "logoWidth") == 0) logoWidth = atoi(Value);
- else if (strcmp(Name, "logoHeight") == 0) logoHeight = atoi(Value);
- else if (strcmp(Name, "logoBorder") == 0) logoBorder = atoi(Value);
- else if (strcmp(Name, "displaySignalStrength") == 0) displaySignalStrength = atoi(Value);
- else if (strcmp(Name, "fontChannelHeaderSize") == 0) fontChannelHeaderSize = atoi(Value);
- else if (strcmp(Name, "fontChannelDateSize") == 0) fontChannelDateSize = atoi(Value);
- else if (strcmp(Name, "fontEPGSize") == 0) fontEPGSize = atoi(Value);
- else if (strcmp(Name, "fontEPGSmallSize") == 0) fontEPGSmallSize = atoi(Value);
- else if (strcmp(Name, "resolutionIconSize") == 0) resolutionIconSize = atoi(Value);
- else if (strcmp(Name, "statusIconSize") == 0) statusIconSize = atoi(Value);
- else if (strcmp(Name, "progressCurrentSchedule") == 0) progressCurrentSchedule = atoi(Value);
- else if (strcmp(Name, "replayHeight") == 0) replayHeight = atoi(Value);
- else if (strcmp(Name, "replayBorderVertical") == 0) replayBorderVertical = atoi(Value);
- else if (strcmp(Name, "replayBorderBottom") == 0) replayBorderBottom = atoi(Value);
- else if (strcmp(Name, "replayFadeTime") == 0) replayFadeTime = atoi(Value);
- else if (strcmp(Name, "fontReplayHeader") == 0) fontReplayHeader = atoi(Value);
- else if (strcmp(Name, "fontReplay") == 0) fontReplay = atoi(Value);
- else if (strcmp(Name, "messageWidth") == 0) messageWidth = atoi(Value);
- else if (strcmp(Name, "messageHeight") == 0) messageHeight = atoi(Value);
- else if (strcmp(Name, "messageBorderBottom") == 0) messageBorderBottom = atoi(Value);
- else if (strcmp(Name, "fontMessage") == 0) fontMessage = atoi(Value);
- else if (strcmp(Name, "messageFadeTime") == 0) messageFadeTime = atoi(Value);
- else if (strcmp(Name, "tracksFadeTime") == 0) tracksFadeTime = atoi(Value);
- else if (strcmp(Name, "tracksWidth") == 0) tracksWidth = atoi(Value);
- else if (strcmp(Name, "tracksItemHeight") == 0) tracksItemHeight = atoi(Value);
- else if (strcmp(Name, "tracksPosition") == 0) tracksPosition = atoi(Value);
- else if (strcmp(Name, "tracksBorderHorizontal") == 0) tracksBorderHorizontal = atoi(Value);
- else if (strcmp(Name, "tracksBorderVertical") == 0) tracksBorderVertical = atoi(Value);
- else if (strcmp(Name, "fontTracksHeader") == 0) fontTracksHeader = atoi(Value);
- else if (strcmp(Name, "fontTracks") == 0) fontTracks = atoi(Value);
- else if (strcmp(Name, "volumeFadeTime") == 0) volumeFadeTime = atoi(Value);
- else if (strcmp(Name, "volumeWidth") == 0) volumeWidth = atoi(Value);
- else if (strcmp(Name, "volumeHeight") == 0) volumeHeight = atoi(Value);
- else if (strcmp(Name, "volumeBorderBottom") == 0) volumeBorderBottom = atoi(Value);
- else if (strcmp(Name, "fontVolume") == 0) fontVolume = atoi(Value);
- else if (strcmp(Name, "menuFadeTime") == 0) menuFadeTime = atoi(Value);
- else if (strcmp(Name, "menuEPGWindowFadeTime") == 0) menuEPGWindowFadeTime = atoi(Value);
- else if (strcmp(Name, "menuScrollDelay") == 0) menuScrollDelay = atoi(Value);
- else if (strcmp(Name, "menuScrollSpeed") == 0) menuScrollSpeed = atoi(Value);
- else if (strcmp(Name, "menuInfoTextDelay") == 0) menuInfoTextDelay = atoi(Value);
- else if (strcmp(Name, "menuInfoScrollDelay") == 0) menuInfoScrollDelay = atoi(Value);
- else if (strcmp(Name, "menuInfoScrollSpeed") == 0) menuInfoScrollSpeed = atoi(Value);
- else if (strcmp(Name, "menuAdjustLeft") == 0) menuAdjustLeft = atoi(Value);
- else if (strcmp(Name, "scalePicture") == 0) scalePicture = atoi(Value);
- else if (strcmp(Name, "roundedCorners") == 0) roundedCorners = atoi(Value);
- else if (strcmp(Name, "cornerRadius") == 0) cornerRadius = atoi(Value);
- else if (strcmp(Name, "useMenuIcons") == 0) useMenuIcons = atoi(Value);
- else if (strcmp(Name, "mainMenuTitleStyle") == 0) mainMenuTitleStyle = atoi(Value);
- else if (strcmp(Name, "narrowMainMenu") == 0) narrowMainMenu = atoi(Value);
- else if (strcmp(Name, "narrowScheduleMenu") == 0) narrowScheduleMenu = atoi(Value);
- else if (strcmp(Name, "narrowChannelMenu") == 0) narrowChannelMenu = atoi(Value);
- else if (strcmp(Name, "narrowTimerMenu") == 0) narrowTimerMenu = atoi(Value);
- else if (strcmp(Name, "narrowRecordingMenu") == 0) narrowRecordingMenu = atoi(Value);
- else if (strcmp(Name, "narrowSetupMenu") == 0) narrowSetupMenu = atoi(Value);
- else if (strcmp(Name, "displayRerunsDetailEPGView") == 0) displayRerunsDetailEPGView = atoi(Value);
- else if (strcmp(Name, "numReruns") == 0) numReruns = atoi(Value);
- else if (strcmp(Name, "useSubtitleRerun") == 0) useSubtitleRerun = atoi(Value);
- else if (strcmp(Name, "displayAdditionalEPGPictures") == 0) displayAdditionalEPGPictures = atoi(Value);
- else if (strcmp(Name, "numAdditionalEPGPictures") == 0) numAdditionalEPGPictures = atoi(Value);
- else if (strcmp(Name, "displayAdditionalRecEPGPictures") == 0) displayAdditionalRecEPGPictures = atoi(Value);
- else if (strcmp(Name, "numAdditionalRecEPGPictures") == 0) numAdditionalRecEPGPictures = atoi(Value);
- else if (strcmp(Name, "menuWidthMain") == 0) menuWidthMain = atoi(Value);
- else if (strcmp(Name, "menuWidthSchedules") == 0) menuWidthSchedules = atoi(Value);
- else if (strcmp(Name, "menuWidthChannels") == 0) menuWidthChannels = atoi(Value);
- else if (strcmp(Name, "menuWidthTimers") == 0) menuWidthTimers = atoi(Value);
- else if (strcmp(Name, "menuWidthRecordings") == 0) menuWidthRecordings = atoi(Value);
- else if (strcmp(Name, "menuWidthSetup") == 0) menuWidthSetup = atoi(Value);
- else if (strcmp(Name, "menuWidthRightItems") == 0) menuWidthRightItems = atoi(Value);
- else if (strcmp(Name, "menuSizeDiskUsage") == 0) menuSizeDiskUsage = atoi(Value);
- else if (strcmp(Name, "menuHeightInfoWindow") == 0) menuHeightInfoWindow = atoi(Value);
- else if (strcmp(Name, "showDiscUsage") == 0) showDiscUsage = atoi(Value);
- else if (strcmp(Name, "showTimers") == 0) showTimers = atoi(Value);
- else if (strcmp(Name, "numberTimers") == 0) numberTimers = atoi(Value);
- else if (strcmp(Name, "checkTimerConflict") == 0) checkTimerConflict = atoi(Value);
- else if (strcmp(Name, "headerHeight") == 0) headerHeight = atoi(Value);
- else if (strcmp(Name, "footerHeight") == 0) footerHeight = atoi(Value);
- else if (strcmp(Name, "numDefaultMenuItems") == 0) numDefaultMenuItems = atoi(Value);
- else if (strcmp(Name, "iconHeight") == 0) iconHeight = atoi(Value);
- else if (strcmp(Name, "headerIconHeight") == 0) headerIconHeight = atoi(Value);
- else if (strcmp(Name, "menuItemLogoWidth") == 0) menuItemLogoWidth = atoi(Value);
- else if (strcmp(Name, "menuItemLogoHeight") == 0) menuItemLogoHeight = atoi(Value);
- else if (strcmp(Name, "menuHeaderLogoWidth") == 0) menuHeaderLogoWidth = atoi(Value);
- else if (strcmp(Name, "menuHeaderLogoHeight") == 0) menuHeaderLogoHeight = atoi(Value);
- else if (strcmp(Name, "detailViewLogoWidth") == 0) detailViewLogoWidth = atoi(Value);
- else if (strcmp(Name, "detailViewLogoHeight") == 0) detailViewLogoHeight = atoi(Value);
- else if (strcmp(Name, "timersLogoWidth") == 0) timersLogoWidth = atoi(Value);
- else if (strcmp(Name, "timersLogoHeight") == 0) timersLogoHeight = atoi(Value);
- else if (strcmp(Name, "epgImageWidth") == 0) epgImageWidth = atoi(Value);
- else if (strcmp(Name, "epgImageHeight") == 0) epgImageHeight = atoi(Value);
- else if (strcmp(Name, "epgImageWidthLarge") == 0) epgImageWidthLarge = atoi(Value);
- else if (strcmp(Name, "epgImageHeightLarge") == 0) epgImageHeightLarge = atoi(Value);
- else if (strcmp(Name, "menuRecFolderSize") == 0) menuRecFolderSize = atoi(Value);
- else if (strcmp(Name, "fontHeader") == 0) fontHeader = atoi(Value);
- else if (strcmp(Name, "fontDate") == 0) fontDate = atoi(Value);
- else if (strcmp(Name, "fontMenuitemLarge") == 0) fontMenuitemLarge = atoi(Value);
- else if (strcmp(Name, "fontMenuitemSchedule") == 0) fontMenuitemSchedule = atoi(Value);
- else if (strcmp(Name, "fontMenuitemScheduleSmall") == 0) fontMenuitemScheduleSmall = atoi(Value);
- else if (strcmp(Name, "fontMenuitemChannel") == 0) fontMenuitemChannel = atoi(Value);
- else if (strcmp(Name, "fontMenuitemChannelSmall") == 0) fontMenuitemChannelSmall = atoi(Value);
- else if (strcmp(Name, "fontMenuitemRecordings") == 0) fontMenuitemRecordings = atoi(Value);
- else if (strcmp(Name, "fontMenuitemRecordingsSmall") == 0) fontMenuitemRecordingsSmall = atoi(Value);
- else if (strcmp(Name, "fontMenuitemTimers") == 0) fontMenuitemTimers = atoi(Value);
- else if (strcmp(Name, "fontMenuitemTimersSmall") == 0) fontMenuitemTimersSmall = atoi(Value);
- else if (strcmp(Name, "fontMenuitemDefault") == 0) fontMenuitemDefault = atoi(Value);
- else if (strcmp(Name, "fontDiskUsage") == 0) fontDiskUsage = atoi(Value);
- else if (strcmp(Name, "fontDiskUsagePercent") == 0) fontDiskUsagePercent = atoi(Value);
- else if (strcmp(Name, "fontTimersHead") == 0) fontTimersHead = atoi(Value);
- else if (strcmp(Name, "fontTimers") == 0) fontTimers = atoi(Value);
- else if (strcmp(Name, "fontButtons") == 0) fontButtons = atoi(Value);
- else if (strcmp(Name, "fontMessageMenu") == 0) fontMessageMenu = atoi(Value);
- else if (strcmp(Name, "fontDetailView") == 0) fontDetailView = atoi(Value);
- else if (strcmp(Name, "fontDetailViewHeader") == 0) fontDetailViewHeader = atoi(Value);
- else if (strcmp(Name, "fontDetailViewHeaderLarge") == 0) fontDetailViewHeaderLarge = atoi(Value);
- else if (strcmp(Name, "fontEPGInfoWindow") == 0) fontEPGInfoWindow = atoi(Value);
- else return false;
+ splitstring s(Name);
+ std::vector<std::string> flds = s.split('.', 0);
+ if (flds.size() == 2) {
+ std::string theme = flds[0];
+ std::string name = flds[1];
+ //check if valid value
+ std::map<std::string, int>::iterator hit = conf.find(name);
+ if (hit == conf.end())
+ return false;
+ SetThemeConfigSetupValue(theme, name, atoi(Value));
+ } else {
+ return false;
+ }
return true;
-
-}
\ No newline at end of file
+}
+
+void cNopacityConfig::SetThemeConfigSetupValue(std::string themeName, std::string key, int value) {
+ //check if theme already in map
+ std::map<std::string, std::map<std::string, int> >::iterator hit = themeConfigSetup.find(themeName);
+ if (hit != themeConfigSetup.end()) {
+ std::map<std::string, int> existingValues = (std::map<std::string, int>)hit->second;
+ existingValues.erase(key);
+ existingValues.insert(std::pair<std::string, int>(key, value));
+ themeConfigSetup.erase(themeName);
+ themeConfigSetup.insert(std::pair<std::string, std::map<std::string, int> >(themeName, existingValues));
+ } else {
+ std::map<std::string, int> themeConf;
+ themeConf.insert(std::pair<std::string, int>(key, value));
+ themeConfigSetup.insert(std::pair<std::string, std::map<std::string, int> >(themeName, themeConf));
+ }
+}
+
+void cNopacityConfig::DumpConfig(void) {
+ esyslog("nopacity: current config -----------------");
+ for(std::map<std::string, int>::const_iterator it = conf.begin(); it != conf.end(); it++) {
+ esyslog("nopacity: %s: %d", (std::string(it->first)).c_str(), (int)it->second);
+ }
+ esyslog("nopacity: --------------------------------");
+}
+
+void cNopacityConfig::DumpThemeConfig(void) {
+ for (std::map<std::string, std::map<std::string, int> >::const_iterator it = themeConfigDefaults.begin(); it != themeConfigDefaults.end(); it++) {
+ esyslog("nopacity: Default Config for theme %s -----------------", (std::string(it->first)).c_str());
+ std::map<std::string, int> themeValues = (std::map<std::string, int>)it->second;
+ for (std::map<std::string, int>::const_iterator it2 = themeValues.begin(); it2 != themeValues.end(); it2++) {
+ esyslog("nopacity: %s: %d", (std::string(it2->first)).c_str(), (int)it2->second);
+ }
+ }
+ esyslog("nopacity: --------------------------------");
+ for (std::map<std::string, std::map<std::string, int> >::const_iterator it3 = themeConfigSetup.begin(); it3 != themeConfigSetup.end(); it3++) {
+ esyslog("nopacity: Setup for theme %s -----------------", (std::string(it3->first)).c_str());
+ std::map<std::string, int> themeValues = (std::map<std::string, int>)it3->second;
+ for (std::map<std::string, int>::const_iterator it4 = themeValues.begin(); it4 != themeValues.end(); it4++) {
+ esyslog("nopacity: %s: %d", (std::string(it4->first)).c_str(), (int)it4->second);
+ }
+ }
+ esyslog("nopacity: --------------------------------");
+}
diff --git a/config.h b/config.h
index 7ec88d8..7990aa5 100644
--- a/config.h
+++ b/config.h
@@ -1,165 +1,219 @@
-#ifndef __NOPACITY_CONFIG_H
-#define __NOPACITY_CONFIG_H
-
-class cNopacityConfig {
- private:
- public:
- cNopacityConfig();
- ~cNopacityConfig();
- bool SetupParse(const char *Name, const char *Value);
- void SetLogoPath(cString path);
- void SetIconPath(cString path);
- void SetEpgImagePath(cString path);
- bool logoPathSet;
- bool epgImagePathSet;
- bool iconPathSet;
- cString logoPathDefault;
- cString iconPathDefault;
- cString epgImagePathDefault;
- void setDynamicValues();
- //Common
- int fontIndex;
- const char *fontDefaultName;
- char *fontName;
- cString logoPath;
- cString logoExtension;
- cString iconPath;
- cString epgImagePath;
- bool mainMenuEntry;
- //DisplayChannel
- int channelHeight;
- int channelBorderVertical;
- int channelBorderBottom;
- int channelFadeTime;
- int channelFrameTime;
- int logoPosition;
- int logoWidth;
- int logoHeight;
- int logoBorder;
- int displaySignalStrength;
- int fontChannelHeaderSize;
- int fontChannelDateSize;
- int fontEPGSize;
- int fontEPGSmallSize;
- int resolutionIconSize;
- int statusIconSize;
- int progressCurrentSchedule;
- //DisplayReplay
- int replayHeight;
- int replayBorderVertical;
- int replayBorderBottom;
- int replayFadeTime;
- int replayFrameTime;
- int fontReplayHeader;
- int fontReplay;
- //Display Message
- int messageWidth;
- int messageHeight;
- int messageBorderBottom;
- int fontMessage;
- int messageFadeTime;
- int messageFrameTime;
- //DisplayTracks
- int tracksFadeTime;
- int tracksFrameTime;
- int tracksWidth;
- int tracksItemHeight;
- int tracksPosition;
- int tracksBorderHorizontal;
- int tracksBorderVertical;
- int fontTracksHeader;
- int fontTracks;
- //DisplayVolume
- int volumeFadeTime;
- int volumeFrameTime;
- int volumeWidth;
- int volumeHeight;
- int volumeBorderBottom;
- int fontVolume;
- //DisplayMenu
- int menuAdjustLeft;
- int scalePicture;
- int roundedCorners;
- int cornerRadius;
- int useMenuIcons;
- int mainMenuTitleStyle;
- int narrowMainMenu;
- int narrowScheduleMenu;
- int narrowChannelMenu;
- int narrowTimerMenu;
- int narrowRecordingMenu;
- int narrowSetupMenu;
- int displayRerunsDetailEPGView;
- int numReruns;
- int useSubtitleRerun;
- int displayAdditionalEPGPictures;
- int numAdditionalEPGPictures;
- int displayAdditionalRecEPGPictures;
- int numAdditionalRecEPGPictures;
- int menuFadeTime;
- int menuEPGWindowFadeTime;
- int menuFrameTime;
- int menuEPGWindowFrameTime;
- int menuScrollDelay;
- int menuScrollSpeed;
- int menuScrollFrameTime;
- int menuInfoTextDelay;
- int menuInfoScrollDelay;
- int menuInfoScrollSpeed;
- int menuInfoScrollFrameTime;
- int menuWidthMain;
- int menuWidthSchedules;
- int menuWidthChannels;
- int menuWidthTimers;
- int menuWidthRecordings;
- int menuWidthSetup;
- int menuHeightInfoWindow;
- int menuWidthRightItems;
- int menuSizeDiskUsage;
- int showDiscUsage;
- int showTimers;
- int numberTimers;
- int checkTimerConflict;
- int headerHeight;
- int footerHeight;
- int numDefaultMenuItems;
- int iconHeight;
- int headerIconHeight;
- int menuItemLogoWidth;
- int menuItemLogoHeight;
- int menuHeaderLogoWidth;
- int menuHeaderLogoHeight;
- int detailViewLogoWidth;
- int detailViewLogoHeight;
- int timersLogoWidth;
- int timersLogoHeight;
- int epgImageWidth;
- int epgImageHeight;
- int epgImageWidthLarge;
- int epgImageHeightLarge;
- int menuRecFolderSize;
- int fontHeader;
- int fontDate;
- int fontMenuitemLarge;
- int fontMenuitemSchedule;
- int fontMenuitemScheduleSmall;
- int fontMenuitemChannel;
- int fontMenuitemChannelSmall;
- int fontMenuitemRecordings;
- int fontMenuitemRecordingsSmall;
- int fontMenuitemTimers;
- int fontMenuitemTimersSmall;
- int fontMenuitemDefault;
- int fontDiskUsage;
- int fontDiskUsagePercent;
- int fontTimersHead;
- int fontTimers;
- int fontButtons;
- int fontMessageMenu;
- int fontDetailView;
- int fontDetailViewHeader;
- int fontDetailViewHeaderLarge;
- int fontEPGInfoWindow;
-};
-
-#endif //__NOPACITY_CONFIG_H
\ No newline at end of file
+#ifndef __NOPACITY_CONFIG_H
+#define __NOPACITY_CONFIG_H
+
+#include <string>
+#include <vector>
+#include <map>
+#include <vdr/tools.h>
+#include <vdr/skins.h>
+#include <vdr/plugin.h>
+#include "fontmanager.h"
+#include "geometrymanager.h"
+
+enum eDisplayType {
+ dtFlat = 0,
+ dtBlending,
+ dtGraphical
+};
+
+class cNopacityConfig {
+ private:
+ std::map<std::string, int> conf;
+ std::map<std::string, std::map<std::string, int> > themeConfigDefaults;
+ std::map<std::string, std::map<std::string, int> > themeConfigSetup;
+ void LoadThemeConfig(cString confFile, cString theme);
+ std::pair<std::string, int> ReadThemeConfigLine(const char *line);
+ cString checkSlashAtEnd(std::string path);
+ public:
+ cNopacityConfig();
+ ~cNopacityConfig();
+ int GetValue(std::string name);
+ int *GetValueRef(std::string name);
+ std::map<std::string, int>::const_iterator GetStart(void) { return conf.begin(); };
+ std::map<std::string, int>::const_iterator GetEnd(void) { return conf.end(); };
+ bool SetupParse(const char *Name, const char *Value);
+ void SetThemeConfigSetupValue(std::string themeName, std::string key, int value);
+ void SetLogoPath(cString path);
+ void SetIconPath(cString path);
+ void SetEpgImagePath(cString path);
+ bool logoPathSet;
+ bool epgImagePathSet;
+ bool iconPathSet;
+ cString logoPathDefault;
+ cString iconPathDefault;
+ cString epgImagePathDefault;
+ void LoadDefaults(void);
+ void LoadThemeSpecificConfigs(void);
+ void SetThemeSpecificDefaults(void);
+ void SetThemeSetup(void);
+ void SetPathes(void);
+ void DumpConfig(void);
+ void DumpThemeConfig(void);
+ void SetFontName();
+ const char *fontDefaultName;
+ char *fontName;
+ cString logoPath;
+ cString logoExtension;
+ cString iconPath;
+ cString epgImagePath;
+ bool mainMenuEntry;
+};
+#ifdef DEFINE_CONFIG
+ bool firstDisplay = true;
+ cNopacityConfig config;
+ cGeometryManager *geoManager;
+ cFontManager *fontManager;
+ cTheme Theme;
+#else
+ extern bool firstDisplay;
+ extern cNopacityConfig config;
+ extern cGeometryManager *geoManager;
+ extern cFontManager *fontManager;
+ extern cTheme Theme;
+#endif
+
+//COMMON
+#define CLR_TRANSPARENT 0x00000000
+#define CLR_MENUBACK 0xB012273F
+#define CLR_FONT 0xFFFFFFFF
+#define CLR_FONTINACTIVE 0xFF858585
+#define CLR_FONTDARK 0xFF000000
+
+//CHANNELS
+#define CLR_CHANNELPROGRESSBAR 0xFFC6D590
+#define CLR_CHANNELPROGRESSBARBACK 0xDD000000
+#define CLR_CHANNELPROGRESSBARBLEND 0xFF8EAB21
+#define CLR_FONTHEAD 0xFFEEEEEE
+#define CLR_CHANNELSYMBOLOFF 0xDD858585
+#define CLR_CHANNELRECACTIVE 0xDDFF0000
+#define CLR_RECNEXT 0xDDFFFF00
+
+//REPLAY
+#define CLR_CURRENT 0x90FFFFFF
+#define CLR_SEEN 0xFF8EAB21
+#define CLR_REST 0xDD858585
+
+//MENU
+#define CLR_MENUBORDER 0xAA242A38
+#define CLR_MENUSCROLLBAR 0x908EAB21
+#define CLR_MENUSCROLLBARBACK 0x99242A38
+#define CLR_MENUSCROLLBARBASE 0x00000000
+#define CLR_DISKALERT 0xDDFF0000
+#define CLR_TIMERS 0x7D000000
+#define CLR_MENUHEADER 0xDD000000
+#define CLR_PROGRESSBAR 0xFFC6D590
+#define CLR_PROGRESSBARBACK 0xDD000000
+#define CLR_PROGRESSBARBLEND 0xFF8EAB21
+#define CLR_PROGRESSBARHIGH 0xDD4E78B1
+#define CLR_PROGRESSBARBACKHIGH 0xDD000000
+#define CLR_PROGRESSBARBLENDHIGH 0xDD80B3FF
+#define CLR_CHANNELLOGOBACK 0x99C6C6C6
+#define CLR_FONTMENUITEMHIGH 0xFF363636
+#define CLR_TEXTWINDOW 0xB0000000
+#define CLR_DETAILVIEWBACK 0x50000000
+#define CLR_DETAILVIEWTABS 0x99242A38
+
+//CHANNELS
+THEME_CLR(Theme, clrChannelBackground, CLR_MENUBACK);
+THEME_CLR(Theme, clrChannelBackBlend, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrChannelHead, CLR_FONTHEAD);
+THEME_CLR(Theme, clrChannelEPG, CLR_FONT);
+THEME_CLR(Theme, clrChannelEPGInfo, CLR_FONT);
+THEME_CLR(Theme, clrChannelEPGNext, CLR_FONTINACTIVE);
+THEME_CLR(Theme, clrChannelEPGInfoNext, CLR_FONTINACTIVE);
+THEME_CLR(Theme, clrChannelProgressBar, CLR_CHANNELPROGRESSBAR);
+THEME_CLR(Theme, clrChannelProgressBarBack, CLR_CHANNELPROGRESSBARBACK);
+THEME_CLR(Theme, clrChannelProgressBarBlend,CLR_CHANNELPROGRESSBARBLEND);
+THEME_CLR(Theme, clrStatusIconsBack, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrRecNow, CLR_CHANNELRECACTIVE);
+THEME_CLR(Theme, clrRecNowFont, CLR_FONT);
+THEME_CLR(Theme, clrRecNext, CLR_RECNEXT);
+THEME_CLR(Theme, clrRecNextFont, CLR_FONTDARK);
+
+//REPLAY
+THEME_CLR(Theme, clrReplayBackground, CLR_MENUBACK);
+THEME_CLR(Theme, clrReplayBackBlend, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrReplayHead, CLR_FONT);
+THEME_CLR(Theme, clrReplayDescription, CLR_FONTINACTIVE);
+THEME_CLR(Theme, clrReplayCurrentTotal, CLR_FONT);
+THEME_CLR(Theme, clrReplayProgressSeen, CLR_SEEN);
+THEME_CLR(Theme, clrReplayProgressRest, CLR_REST);
+THEME_CLR(Theme, clrReplayProgressSelected, CLR_FONTDARK);
+THEME_CLR(Theme, clrReplayProgressMark, CLR_FONTDARK);
+THEME_CLR(Theme, clrReplayProgressCurrent, CLR_CURRENT);
+THEME_CLR(Theme, clrReplayHighlightIcon, CLR_TRANSPARENT);
+
+//TRACKS
+THEME_CLR(Theme, clrTracksFontHead, CLR_FONTINACTIVE);
+THEME_CLR(Theme, clrTracksFontButtons, CLR_FONT);
+
+//Volume
+THEME_CLR(Theme, clrVolumeFont, CLR_FONT);
+
+//MENU
+THEME_CLR(Theme, clrMenuBack, CLR_MENUBACK);
+THEME_CLR(Theme, clrMenuBorder, CLR_MENUBORDER);
+THEME_CLR(Theme, clrMenuScrollBar, CLR_MENUSCROLLBAR);
+THEME_CLR(Theme, clrMenuScrollBarBack, CLR_MENUSCROLLBARBACK);
+THEME_CLR(Theme, clrMenuScrollBarBase, CLR_MENUSCROLLBARBASE);
+THEME_CLR(Theme, clrMenuItem, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrMenuItemBlend, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrMenuItemHigh, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrMenuItemHighBlend, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrSeparatorBorder, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrDiskAlert, CLR_DISKALERT);
+THEME_CLR(Theme, clrTimersBack, CLR_TIMERS);
+THEME_CLR(Theme, clrTimersBackBlend, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrMenuFontHeader, CLR_FONT);
+THEME_CLR(Theme, clrMenuFontDate, CLR_FONT);
+THEME_CLR(Theme, clrMenuFontDiscUsage, CLR_FONTDARK);
+THEME_CLR(Theme, clrMenuFontDiscUsagePerc, CLR_FONT);
+THEME_CLR(Theme, clrMenuFontTimers, CLR_FONT);
+THEME_CLR(Theme, clrMenuFontTimersHeader, CLR_FONT);
+THEME_CLR(Theme, clrMenuFontDetailViewText, CLR_FONT);
+THEME_CLR(Theme, clrMenuFontDetailViewHeader, CLR_FONTINACTIVE);
+THEME_CLR(Theme, clrMenuFontDetailViewHeaderTitle, CLR_FONT);
+THEME_CLR(Theme, clrMenuFontMenuItem, CLR_FONT);
+THEME_CLR(Theme, clrMenuFontMenuItemHigh, CLR_FONTMENUITEMHIGH);
+THEME_CLR(Theme, clrMenuFontMenuItemTitle, CLR_FONTMENUITEMHIGH);
+THEME_CLR(Theme, clrMenuFontMenuItemSep, CLR_FONTINACTIVE);
+THEME_CLR(Theme, clrMenuHeader, CLR_MENUHEADER);
+THEME_CLR(Theme, clrMenuHeaderBlend, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrAudioMenuHeader, CLR_MENUHEADER);
+THEME_CLR(Theme, clrProgressBar, CLR_PROGRESSBAR);
+THEME_CLR(Theme, clrProgressBarBack, CLR_PROGRESSBARBACK);
+THEME_CLR(Theme, clrProgressBarBlend, CLR_PROGRESSBARBLEND);
+THEME_CLR(Theme, clrProgressBarHigh, CLR_PROGRESSBARHIGH);
+THEME_CLR(Theme, clrProgressBarBackHigh, CLR_PROGRESSBARBACKHIGH);
+THEME_CLR(Theme, clrProgressBarBlendHigh, CLR_PROGRESSBARBLENDHIGH);
+THEME_CLR(Theme, clrMenuTextWindow, CLR_TEXTWINDOW);
+THEME_CLR(Theme, clrMenuChannelLogoBack, CLR_CHANNELLOGOBACK);
+THEME_CLR(Theme, clrMenuDetailViewBack, CLR_DETAILVIEWBACK);
+THEME_CLR(Theme, clrMenuDetailViewTabs, CLR_DETAILVIEWTABS);
+
+//BUTTONS
+THEME_CLR(Theme, clrButtonRed, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrButtonRedBorder, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrButtonRedFont, CLR_FONT);
+THEME_CLR(Theme, clrButtonGreen, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrButtonGreenBorder, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrButtonGreenFont, CLR_FONT);
+THEME_CLR(Theme, clrButtonYellow, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrButtonYellowBorder, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrButtonYellowFont, CLR_FONT);
+THEME_CLR(Theme, clrButtonBlue, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrButtonBlueBorder, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrButtonBlueFont, CLR_FONT);
+
+//MESSAGES
+THEME_CLR(Theme, clrMessageFontStatus, CLR_FONT);
+THEME_CLR(Theme, clrMessageFontInfo, CLR_FONT);
+THEME_CLR(Theme, clrMessageFontWarning, CLR_FONT);
+THEME_CLR(Theme, clrMessageFontError, CLR_FONT);
+THEME_CLR(Theme, clrMessageStatus, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrMessageInfo, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrMessageWarning, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrMessageError, CLR_TRANSPARENT);
+THEME_CLR(Theme, clrMessageBlend, CLR_TRANSPARENT);
+
+#endif //__NOPACITY_CONFIG_H
diff --git a/detailview.c b/detailview.c
new file mode 100644
index 0000000..ad230b5
--- /dev/null
+++ b/detailview.c
@@ -0,0 +1,1130 @@
+#include "detailview.h"
+
+/********************************************************************************************
+* cNopacityView
+********************************************************************************************/
+
+cNopacityView::cNopacityView(cOsd *osd, cImageCache *imgCache) {
+ this->osd = osd;
+ this->imgCache = imgCache;
+ activeView = 0;
+ scrollable = false;
+ tabbed = false;
+ font = NULL;
+ fontSmall = NULL;
+ fontHeader = NULL;
+ fontHeaderLarge = NULL;
+ pixmapHeader = NULL;
+ pixmapHeaderLogo = NULL;
+ pixmapContent = NULL;
+ pixmapContentBack = NULL;
+ pixmapTabs = NULL;
+ title = "";
+ subTitle = "";
+ dateTime = "";
+ infoText = "";
+ channel = NULL;
+ eventID = 0;
+ recFileName = "";
+ x = 0;
+ y = 0;
+ width = 0;
+ height = 0;
+ border = 0;
+ headerHeight = 0;
+ contentHeight = 0;
+ tabHeight = 0;
+ headerDrawn = false;
+}
+
+cNopacityView::~cNopacityView(void) {
+ if (font)
+ delete font;
+ if (fontSmall)
+ delete fontSmall;
+ if (fontHeader)
+ delete fontHeader;
+ if (fontHeaderLarge)
+ delete fontHeaderLarge;
+ if (pixmapHeader)
+ osd->DestroyPixmap(pixmapHeader);
+ if (pixmapHeaderLogo)
+ osd->DestroyPixmap(pixmapHeaderLogo);
+ if (pixmapContent)
+ osd->DestroyPixmap(pixmapContent);
+ if (pixmapContentBack)
+ osd->DestroyPixmap(pixmapContentBack);
+ if (pixmapTabs)
+ osd->DestroyPixmap(pixmapTabs);
+}
+
+void cNopacityView::SetGeometry(int x, int y, int width, int height, int border, int headerHeight) {
+ this->x = x;
+ this->y = y;
+ this->width = width;
+ this->height = height;
+ this->border = border;
+ this->headerHeight = headerHeight;
+ if (tabbed)
+ tabHeight = 2 * border;
+ contentHeight = height - headerHeight - tabHeight;
+}
+
+void cNopacityView::SetFonts(void) {
+ font = cFont::CreateFont(config.fontName, contentHeight / 25 + 3 + config.GetValue("fontDetailView"));
+ fontSmall = cFont::CreateFont(config.fontName, contentHeight / 30 + config.GetValue("fontDetailViewSmall"));
+ fontHeaderLarge = cFont::CreateFont(config.fontName, headerHeight / 4 + 5 + config.GetValue("fontDetailViewHeaderLarge"));
+ fontHeader = cFont::CreateFont(config.fontName, headerHeight / 6 + config.GetValue("fontDetailViewHeader"));
+}
+
+void cNopacityView::DrawHeader(void) {
+ if (!pixmapHeader) {
+ pixmapHeader = osd->CreatePixmap(4, cRect(x, y, width, headerHeight));
+ }
+ if (!pixmapHeaderLogo) {
+ pixmapHeaderLogo = osd->CreatePixmap(5, cRect(x, y, width, headerHeight));
+ }
+ pixmapHeader->Fill(Theme.Color(clrMenuDetailViewBack));
+ pixmapHeaderLogo->Fill(clrTransparent);
+ //Channel Logo
+ int logoWidth = geoManager->channelLogoWidth;
+ int xText = border;
+ if (channel) {
+ cImage *logo = imgCache->GetLogo(ctLogo, channel);
+ if (logo) {
+ pixmapHeaderLogo->DrawImage(cPoint(border, max((headerHeight - geoManager->channelLogoHeight - border)/2, 0)), *logo);
+ xText += logoWidth + border;
+ }
+ }
+ //Date and Time, Title, Subtitle
+ int yDateTime = border;
+ int yTitle = (headerHeight - fontHeaderLarge->Height()) / 2;
+ int ySubtitle = headerHeight - fontHeader->Height() - border;
+ pixmapHeader->DrawText(cPoint(xText, yDateTime), dateTime.c_str(), Theme.Color(clrMenuFontDetailViewHeader), Theme.Color(clrMenuDetailViewBack), fontHeader);
+ pixmapHeader->DrawText(cPoint(xText, yTitle), title.c_str(), Theme.Color(clrMenuFontDetailViewHeaderTitle), Theme.Color(clrMenuDetailViewBack), fontHeaderLarge);
+ pixmapHeader->DrawText(cPoint(xText, ySubtitle), subTitle.c_str(), Theme.Color(clrMenuFontDetailViewHeader), Theme.Color(clrMenuDetailViewBack), fontHeader);
+}
+
+void cNopacityView::DrawTabs(void) {
+ if (!pixmapTabs) {
+ pixmapTabs = osd->CreatePixmap(4, cRect(0, y + height - tabHeight, width, tabHeight));
+ }
+ tColor bgColor = Theme.Color(clrMenuDetailViewTabs);
+ pixmapTabs->Fill(clrTransparent);
+ pixmapTabs->DrawRectangle(cRect(0, 0, width, 2), bgColor);
+ int numTabs = tabs.size();
+ int xCurrent = 0;
+ for (int tab = 0; tab < numTabs; tab++) {
+ std::string tabText = tabs[tab];
+ int textWidth = font->Width(tabText.c_str());
+ int tabWidth = textWidth + border;
+ pixmapTabs->DrawRectangle(cRect(xCurrent, (tab == activeView) ? 0 : 2, tabWidth - 2, tabHeight), bgColor);
+ pixmapTabs->DrawEllipse(cRect(xCurrent, tabHeight - border/2, border/2, border/2), clrTransparent, -3);
+ pixmapTabs->DrawEllipse(cRect(xCurrent + tabWidth - border / 2 - 2, tabHeight - border/2, border/2, border/2), clrTransparent, -4);
+ if (tab == activeView) {
+ pixmapTabs->DrawRectangle(cRect(xCurrent + 2, 0, tabWidth - 6, tabHeight - border/2 - 1), clrTransparent);
+ pixmapTabs->DrawRectangle(cRect(xCurrent + border / 2, tabHeight - border/2 - 1, tabWidth - border, border/2 - 1), clrTransparent);
+ pixmapTabs->DrawEllipse(cRect(xCurrent + 2, tabHeight - border/2 - 2, border/2, border/2), clrTransparent, 3);
+ pixmapTabs->DrawEllipse(cRect(xCurrent + tabWidth - border / 2 - 4, tabHeight - border/2 - 2, border/2, border/2), clrTransparent, 4);
+ }
+ pixmapTabs->DrawText(cPoint(xCurrent + (tabWidth - textWidth) / 2, 2 + (tabHeight - font->Height())/2), tabText.c_str(), Theme.Color(clrMenuFontDetailViewText), (tab == activeView) ? clrTransparent : bgColor, font);
+ xCurrent += tabWidth;
+ }
+}
+
+void cNopacityView::ClearContent(void) {
+ if (pixmapContent && Running()) {
+ osd->DestroyPixmap(pixmapContent);
+ pixmapContent = NULL;
+ }
+}
+
+void cNopacityView::CreateContent(int fullHeight) {
+ scrollable = false;
+ int drawPortHeight = contentHeight;
+ if (fullHeight > contentHeight) {
+ drawPortHeight = fullHeight;
+ scrollable = true;
+ }
+ if (!pixmapContentBack) {
+ pixmapContentBack = osd->CreatePixmap(3, cRect(x, y + headerHeight, width, contentHeight + tabHeight));
+ pixmapContentBack->Fill(Theme.Color(clrMenuDetailViewBack));
+ }
+ pixmapContent = osd->CreatePixmap(4, cRect(x, y + headerHeight, width, contentHeight), cRect(0, 0, width, drawPortHeight));
+ pixmapContent->Fill(clrTransparent);
+}
+
+void cNopacityView::DrawContent(std::string *text) {
+ cTextWrapper wText;
+ wText.Set(text->c_str(), font, width - 2 * border);
+ int lineHeight = font->Height();
+ int textLines = wText.Lines();
+ int textHeight = lineHeight * textLines + 2*border;
+ int yText = border;
+ CreateContent(textHeight);
+ for (int i=0; i < textLines; i++) {
+ pixmapContent->DrawText(cPoint(border, yText), wText.GetLine(i), Theme.Color(clrMenuFontDetailViewText), clrTransparent, font);
+ yText += lineHeight;
+ }
+}
+
+void cNopacityView::DrawFloatingContent(std::string *infoText, cTvMedia *img, cTvMedia *img2) {
+ cTextWrapper wTextTall;
+ cTextWrapper wTextFull;
+ int imgWidth = img->width;
+ int imgHeight = img->height;
+ int imgWidth2 = 0;
+ int imgHeight2 = 0;
+ if (imgHeight > (contentHeight - 2 * border)) {
+ imgHeight = contentHeight - 2 * border;
+ imgWidth = imgWidth * ((double)imgHeight / (double)img->height);
+ }
+ int imgHeightTotal = imgHeight;
+ if (img2) {
+ imgWidth2 = imgWidth;
+ imgHeight2 = img2->height * ((double)img2->width / (double)imgWidth2);
+ imgHeightTotal += img2->height + border;
+ }
+ CreateFloatingTextWrapper(&wTextTall, &wTextFull, infoText, imgWidth, imgHeightTotal);
+ int lineHeight = font->Height();
+ int textLinesTall = wTextTall.Lines();
+ int textLinesFull = wTextFull.Lines();
+ int textHeight = lineHeight * (textLinesTall + textLinesFull) + 2*border;
+ int yText = border;
+ CreateContent(max(textHeight, imgHeight + 2*border));
+ for (int i=0; i < textLinesTall; i++) {
+ pixmapContent->DrawText(cPoint(border, yText), wTextTall.GetLine(i), Theme.Color(clrMenuFontDetailViewText), clrTransparent, font);
+ yText += lineHeight;
+ }
+ for (int i=0; i < textLinesFull; i++) {
+ pixmapContent->DrawText(cPoint(border, yText), wTextFull.GetLine(i), Theme.Color(clrMenuFontDetailViewText), clrTransparent, font);
+ yText += lineHeight;
+ }
+ osd->Flush();
+ cImageLoader imgLoader;
+ if (imgLoader.LoadPoster(img->path.c_str(), imgWidth, imgHeight)) {
+ if (Running() && pixmapContent)
+ pixmapContent->DrawImage(cPoint(width - imgWidth - border, border), imgLoader.GetImage());
+ }
+ if (!img2)
+ return;
+ osd->Flush();
+ if (imgLoader.LoadPoster(img2->path.c_str(), imgWidth2, imgHeight2)) {
+ if (Running() && pixmapContent)
+ pixmapContent->DrawImage(cPoint(width - imgWidth2 - border, imgHeight + 2*border), imgLoader.GetImage());
+ }
+}
+
+void cNopacityView::CreateFloatingTextWrapper(cTextWrapper *twNarrow, cTextWrapper *twFull, std::string *text, int widthImg, int heightImg) {
+ int lineHeight = font->Height();
+ int linesNarrow = (heightImg + 2*border)/ lineHeight;
+ int linesDrawn = 0;
+ int y = 0;
+ int widthNarrow = width - 3 * border - widthImg;
+ bool drawNarrow = true;
+
+ splitstring s(text->c_str());
+ std::vector<std::string> flds = s.split('\n', 1);
+
+ if (flds.size() < 1)
+ return;
+
+ std::stringstream sstrTextTall;
+ std::stringstream sstrTextFull;
+
+ for (int i=0; i<flds.size(); i++) {
+ if (!flds[i].size()) {
+ //empty line
+ linesDrawn++;
+ y += lineHeight;
+ if (drawNarrow)
+ sstrTextTall << "\n";
+ else
+ sstrTextFull << "\n";
+ } else {
+ cTextWrapper wrapper;
+ if (drawNarrow) {
+ wrapper.Set((flds[i].c_str()), font, widthNarrow);
+ int newLines = wrapper.Lines();
+ //check if wrapper fits completely into narrow area
+ if (linesDrawn + newLines < linesNarrow) {
+ for (int line = 0; line < wrapper.Lines(); line++) {
+ sstrTextTall << wrapper.GetLine(line) << " ";
+ }
+ sstrTextTall << "\n";
+ linesDrawn += newLines;
+ } else {
+ //this wrapper has to be splitted
+ for (int line = 0; line < wrapper.Lines(); line++) {
+ if (line + linesDrawn < linesNarrow) {
+ sstrTextTall << wrapper.GetLine(line) << " ";
+ } else {
+ sstrTextFull << wrapper.GetLine(line) << " ";
+ }
+ }
+ sstrTextFull << "\n";
+ drawNarrow = false;
+ }
+ } else {
+ wrapper.Set((flds[i].c_str()), font, width - 2*border);
+ for (int line = 0; line < wrapper.Lines(); line++) {
+ sstrTextFull << wrapper.GetLine(line) << " ";
+ }
+ sstrTextFull << "\n";
+ }
+ }
+ }
+ twNarrow->Set(sstrTextTall.str().c_str(), font, widthNarrow);
+ twFull->Set(sstrTextFull.str().c_str(), font, width - 2 * border);
+}
+
+void cNopacityView::DrawActors(std::vector<cActor> *actors) {
+ int numActors = actors->size();
+ if (numActors < 1) {
+ CreateContent(100);
+ pixmapContent->DrawText(cPoint(border, border), tr("No Cast available"), Theme.Color(clrMenuFontDetailViewText), clrTransparent, fontHeaderLarge);
+ return;
+ }
+ int thumbWidth = actors->at(0).actorThumb.width;
+ int thumbHeight = actors->at(0).actorThumb.height;
+
+ int picsPerLine = width / (thumbWidth + 2 * border);
+ if (picsPerLine < 1)
+ return;
+
+ int picLines = numActors / picsPerLine;
+ if (numActors%picsPerLine != 0)
+ picLines++;
+
+ int totalHeight = picLines * (thumbHeight + 2*fontSmall->Height() + border + border/2) + 2*border + fontHeaderLarge->Height();
+
+ CreateContent(totalHeight);
+ cString header = cString::sprintf("%s:", tr("Cast"));
+ pixmapContent->DrawText(cPoint(border, border), *header, Theme.Color(clrMenuFontDetailViewText), clrTransparent, fontHeaderLarge);
+
+ int x = 0;
+ int y = 2 * border + fontHeaderLarge->Height();
+ if (!Running())
+ return;
+ cImageLoader imgLoader;
+ int actor = 0;
+ for (int row = 0; row < picLines; row++) {
+ for (int col = 0; col < picsPerLine; col++) {
+ if (!Running())
+ return;
+ if (actor == numActors)
+ break;
+ std::string path = actors->at(actor).actorThumb.path;
+ std::string name = actors->at(actor).name;
+ std::stringstream sstrRole;
+ sstrRole << "\"" << actors->at(actor).role << "\"";
+ std::string role = sstrRole.str();
+ if (imgLoader.LoadPoster(path.c_str(), thumbWidth, thumbHeight)) {
+ if (Running() && pixmapContent)
+ pixmapContent->DrawImage(cPoint(x + border, y), imgLoader.GetImage());
+ }
+
+ if (fontSmall->Width(name.c_str()) > thumbWidth + 2*border)
+ name = CutText(name, thumbWidth + 2*border, fontSmall);
+ if (fontSmall->Width(role.c_str()) > thumbWidth + 2*border)
+ role = CutText(role, thumbWidth + 2*border, fontSmall);
+ int xName = x + ((thumbWidth+2*border) - fontSmall->Width(name.c_str()))/2;
+ int xRole = x + ((thumbWidth+2*border) - fontSmall->Width(role.c_str()))/2;
+ if (Running() && pixmapContent) {
+ pixmapContent->DrawText(cPoint(xName, y + thumbHeight + border/2), name.c_str(), Theme.Color(clrMenuFontDetailViewText), clrTransparent, fontSmall);
+ pixmapContent->DrawText(cPoint(xRole, y + thumbHeight + border/2 + fontSmall->Height()), role.c_str(), Theme.Color(clrMenuFontDetailViewText), clrTransparent, fontSmall);
+ x += thumbWidth + 2*border;
+ }
+ actor++;
+ }
+ osd->Flush();
+ x = 0;
+ y += thumbHeight + 2 * fontSmall->Height() + border + border/2;
+ }
+}
+
+void cNopacityView::ClearScrollbar(void) {
+ pixmapScrollbar->Fill(clrTransparent);
+ pixmapScrollbarBack->Fill(clrTransparent);
+}
+
+void cNopacityView::DrawScrollbar(void) {
+ ClearScrollbar();
+ if (!scrollable || !pixmapContent)
+ return;
+ int totalBarHeight = pixmapScrollbar->ViewPort().Height() - 6;
+
+ int aktHeight = (-1)*pixmapContent->DrawPort().Point().Y();
+ int totalHeight = pixmapContent->DrawPort().Height();
+ int screenHeight = pixmapContent->ViewPort().Height();
+
+ int barHeight = (double)(screenHeight * totalBarHeight) / (double)totalHeight ;
+ int barTop = (double)(aktHeight * totalBarHeight) / (double)totalHeight ;
+
+ if (config.GetValue("displayType") == dtGraphical) {
+ cImage *image = imgCache->GetSkinElement(seScrollbar);
+ if (image)
+ pixmapScrollbarBack->DrawImage(cPoint(0, 0), *image);
+ } else {
+ pixmapScrollbarBack->Fill(Theme.Color(clrMenuScrollBar));
+ pixmapScrollbarBack->DrawRectangle(cRect(2,2,geoManager->menuWidthScrollbar-4, pixmapScrollbarBack->ViewPort().Height() - 4), Theme.Color(clrMenuScrollBarBack));
+ }
+
+ pixmapScrollbar->DrawRectangle(cRect(3,3 + barTop,geoManager->menuWidthScrollbar-6,barHeight), Theme.Color(clrMenuScrollBar));
+}
+
+bool cNopacityView::KeyUp(void) {
+ if (!scrollable)
+ return false;
+ int aktHeight = pixmapContent->DrawPort().Point().Y();
+ int lineHeight = font->Height();
+ if (aktHeight >= 0) {
+ return false;
+ }
+ int step = config.GetValue("detailedViewScrollStep") * font->Height();
+ int newY = aktHeight + step;
+ if (newY > 0)
+ newY = 0;
+ pixmapContent->SetDrawPortPoint(cPoint(0, newY));
+ return true;
+}
+
+bool cNopacityView::KeyDown(void) {
+ if (!scrollable)
+ return false;
+ int aktHeight = pixmapContent->DrawPort().Point().Y();
+ int totalHeight = pixmapContent->DrawPort().Height();
+ int screenHeight = pixmapContent->ViewPort().Height();
+
+ if (totalHeight - ((-1)*aktHeight) == screenHeight) {
+ return false;
+ }
+ int step = config.GetValue("detailedViewScrollStep") * font->Height();
+ int newY = aktHeight - step;
+ if ((-1)*newY > totalHeight - screenHeight)
+ newY = (-1)*(totalHeight - screenHeight);
+ pixmapContent->SetDrawPortPoint(cPoint(0, newY));
+ return true;
+}
+
+/********************************************************************************************
+* cNopacityEPGView : cNopacityView
+********************************************************************************************/
+
+cNopacityEPGView::cNopacityEPGView(cOsd *osd, cImageCache *imgCache) : cNopacityView(osd, imgCache) {
+ tabbed = true;
+ pixmapHeaderEPGImage = NULL;
+ numEPGPics = -1;
+ numTabs = 0;
+}
+
+cNopacityEPGView::~cNopacityEPGView(void) {
+ Cancel(-1);
+ while (Active())
+ cCondWait::SleepMs(10);
+ if (pixmapHeaderEPGImage)
+ osd->DestroyPixmap(pixmapHeaderEPGImage);
+}
+
+void cNopacityEPGView::SetTabs(void) {
+ tabs.push_back(tr("EPG Info"));
+ if (eventID > 0)
+ tabs.push_back(tr("Reruns"));
+ else
+ tabs.push_back(tr("Recording Information"));
+ if (numEPGPics > 0)
+ tabs.push_back(tr("Image Galery"));
+ numTabs = tabs.size();
+}
+
+void cNopacityEPGView::DrawHeaderEPGImage(void) {
+ cImageLoader imgLoader;
+ if (eventID > 0) {
+ if (!imgLoader.LoadEPGImage(eventID))
+ return;
+ } else if (recFileName.size() > 0) {
+ if (!imgLoader.LoadRecordingImage(recFileName.c_str()))
+ return;
+ } else
+ return;
+
+ if (!pixmapHeaderEPGImage) {
+ pixmapHeaderEPGImage = osd->CreatePixmap(3, cRect(x, y, width, headerHeight));
+ }
+
+ int imgWidthOrig = config.GetValue("epgImageWidth");
+ int imgHeightOrig = config.GetValue("epgImageHeight");
+
+ int imgWidth = imgWidthOrig;
+ int imgHeight = imgHeightOrig;
+
+ if (imgHeight > (headerHeight-10)) {
+ imgHeight = headerHeight - 10;
+ imgWidth = imgWidthOrig * ((double)imgHeight / (double)imgHeightOrig);
+ }
+
+ pixmapHeaderEPGImage->Fill(clrTransparent);
+ pixmapHeaderEPGImage->DrawImage(cPoint(width - imgWidth - border, (headerHeight - imgHeight)/2), imgLoader.GetImage());
+}
+
+void cNopacityEPGView::CheckEPGImages(void) {
+ if (eventID > 0) {
+ for (int i=1; i <= config.GetValue("numAdditionalEPGPictures"); i++) {
+ cString epgimage;
+ if (config.epgImagePathSet) {
+ epgimage = cString::sprintf("%s%d_%d.jpg", *config.epgImagePath, eventID, i);
+ } else {
+ epgimage = cString::sprintf("%s%d_%d.jpg", *config.epgImagePathDefault, eventID, i);
+ }
+ FILE *fp = fopen(*epgimage, "r");
+ if (fp) {
+ std::stringstream ss;
+ ss << i;
+ epgPics.push_back(ss.str());
+ fclose(fp);
+ } else {
+ break;
+ }
+ }
+ } else if (recFileName.size() > 0) {
+ DIR *dirHandle;
+ struct dirent *dirEntry;
+ dirHandle = opendir(recFileName.c_str());
+ int picsFound = 0;
+ if (dirHandle != NULL) {
+ while ( 0 != (dirEntry = readdir(dirHandle))) {
+ if (endswith(dirEntry->d_name, "jpg")) {
+ std::string fileName = dirEntry->d_name;
+ if (fileName.length() > 4) {
+ fileName = fileName.substr(0, fileName.length() - 4);
+ epgPics.push_back(fileName);
+ picsFound++;
+ }
+ }
+ if (picsFound >= config.GetValue("numAdditionalRecEPGPictures")) {
+ break;
+ }
+ }
+ closedir(dirHandle);
+ }
+ } else {
+ return;
+ }
+ numEPGPics = epgPics.size();
+}
+
+void cNopacityEPGView::DrawImages(void) {
+ int imgWidth = config.GetValue("epgImageWidthLarge");
+ int imgHeight = config.GetValue("epgImageHeightLarge");
+
+ int totalHeight = numEPGPics * (imgHeight + border);
+
+ CreateContent(totalHeight);
+
+ cImageLoader imgLoader;
+ int yPic = border;
+ for (int pic = 0; pic < numEPGPics; pic++) {
+ bool drawPic = false;
+ if (eventID > 0) {
+ cString epgimage = cString::sprintf("%d_%d", eventID, atoi(epgPics[pic].c_str()));
+ if (imgLoader.LoadAdditionalEPGImage(epgimage)) {
+ drawPic = true;
+ }
+
+ } else if (recFileName.size() > 0) {
+ std::string path = recFileName + "/";
+ if (imgLoader.LoadAdditionalRecordingImage(path.c_str(), epgPics[pic].c_str())) {
+ drawPic = true;
+ }
+ }
+ if (drawPic) {
+ pixmapContent->DrawImage(cPoint((width - imgWidth) / 2, yPic), imgLoader.GetImage());
+ yPic += imgHeight + border;
+ osd->Flush();
+ }
+ }
+}
+
+void cNopacityEPGView::KeyLeft(void) {
+ if (Running())
+ return;
+ activeView--;
+ if (activeView < 0)
+ activeView = numTabs - 1;
+}
+
+void cNopacityEPGView::KeyRight(void) {
+ if (Running())
+ return;
+ activeView = (activeView + 1) % numTabs;
+}
+
+void cNopacityEPGView::Action(void) {
+ ClearContent();
+ if (!headerDrawn) {
+ DrawHeader();
+ osd->Flush();
+ DrawHeaderEPGImage();
+ osd->Flush();
+ headerDrawn = true;
+ }
+ if (tabs.size() == 0) {
+ CheckEPGImages();
+ SetTabs();
+ }
+ DrawTabs();
+ switch (activeView) {
+ case evtInfo:
+ DrawContent(&infoText);
+ break;
+ case evtAddInfo:
+ DrawContent(&addInfoText);
+ break;
+ case evtImages:
+ DrawImages();
+ break;
+ }
+ DrawScrollbar();
+ osd->Flush();
+}
+
+/********************************************************************************************
+* cNopacitySeriesView : cNopacityView
+********************************************************************************************/
+
+cNopacitySeriesView::cNopacitySeriesView(cOsd *osd, cImageCache *imgCache, int seriesId, int episodeId) : cNopacityView(osd, imgCache) {
+ this->seriesId = seriesId;
+ this->episodeId = episodeId;
+ tvdbInfo = "";
+ pixmapHeaderBanner = NULL;
+ tabbed = true;
+}
+
+cNopacitySeriesView::~cNopacitySeriesView(void) {
+ Cancel(-1);
+ while (Active())
+ cCondWait::SleepMs(10);
+ if (pixmapHeaderBanner)
+ osd->DestroyPixmap(pixmapHeaderBanner);
+}
+
+void cNopacitySeriesView::LoadMedia(void) {
+ static cPlugin *pScraper = GetScraperPlugin();
+ if (!pScraper || seriesId < 1)
+ return;
+ series.seriesId = seriesId;
+ series.episodeId = episodeId;
+ pScraper->Service("GetSeries", &series);
+}
+
+void cNopacitySeriesView::SetTabs(void) {
+ tabs.push_back(tr("EPG Info"));
+ if (eventID > 0)
+ tabs.push_back(tr("Reruns"));
+ else
+ tabs.push_back(tr("Recording Information"));
+ tabs.push_back(tr("Cast"));
+ tabs.push_back(tr("TheTVDB Info"));
+ tabs.push_back(tr("Image Galery"));
+}
+
+void cNopacitySeriesView::CreateTVDBInfo(void) {
+ if (tvdbInfo.size() > 0)
+ return;
+ std::stringstream info;
+ info << tr("TheTVDB Information") << ":\n\n";
+
+ if (series.episode.name.size() > 0) {
+ info << tr("Episode") << ": " << series.episode.name << " (" << tr("Season") << " " << series.episode.season << ", " << tr("Episode") << " " << series.episode.number << ")\n\n";
+ }
+ if (series.episode.overview.size() > 0) {
+ info << tr("Episode Overview") << ": " << series.episode.overview << "\n\n";
+ }
+ if (series.episode.firstAired.size() > 0) {
+ info << tr("First aired") << ": " << series.episode.firstAired << "\n\n";
+ }
+ if (series.episode.guestStars.size() > 0) {
+ info << tr("Guest Stars") << ": " << series.episode.guestStars << "\n\n";
+ }
+ if (series.episode.rating > 0) {
+ info << tr("TheMovieDB Rating") << ": " << series.episode.rating << "\n\n";
+ }
+ if (series.overview.size() > 0) {
+ info << tr("Series Overview") << ": " << series.overview << "\n\n";
+ }
+ if (series.firstAired.size() > 0) {
+ info << tr("First aired") << ": " << series.firstAired << "\n\n";
+ }
+ if (series.genre.size() > 0) {
+ info << tr("Genre") << ": " << series.genre << "\n\n";
+ }
+ if (series.network.size() > 0) {
+ info << tr("Network") << ": " << series.network << "\n\n";
+ }
+ if (series.rating > 0) {
+ info << tr("TheMovieDB Rating") << ": " << series.rating << "\n\n";
+ }
+ if (series.status.size() > 0) {
+ info << tr("Status") << ": " << series.status << "\n\n";
+ }
+ tvdbInfo = info.str();
+}
+
+void cNopacitySeriesView::DrawHeaderBanner(void) {
+ if (series.banners.size() == 0)
+ return;
+ if (series.banners[0].height == 0)
+ return;
+
+ int bannerWidthOrig = series.banners[0].width;
+ int bannerHeightOrig = series.banners[0].height;
+ std::string bannerPath = series.banners[0].path;
+
+ if (bannerWidthOrig == 0)
+ return;
+
+ int bannerWidth = bannerWidthOrig;
+ int bannerHeight = bannerHeightOrig;
+
+ if (headerHeight < bannerHeightOrig) {
+ bannerHeight = headerHeight;
+ bannerWidth = bannerWidthOrig * ((double)bannerHeight / (double)bannerHeightOrig);
+ }
+
+ int bannerX = width - bannerWidth - border;
+ int bannerY = (headerHeight - bannerHeight) / 2;
+
+ if (!pixmapHeaderBanner) {
+ pixmapHeaderBanner = osd->CreatePixmap(3, cRect(x, y, width, headerHeight));
+ }
+ pixmapHeaderBanner->Fill(clrTransparent);
+
+ cImageLoader imgLoader;
+ if (imgLoader.LoadPoster(bannerPath.c_str(), bannerWidth, bannerHeight) && Running()) {
+ pixmapHeaderBanner->DrawImage(cPoint(bannerX, bannerY), imgLoader.GetImage());
+ }
+}
+
+void cNopacitySeriesView::DrawImages(void) {
+ int numPosters = series.posters.size();
+ int numFanarts = series.fanarts.size();
+ int numBanners = series.banners.size();
+
+ int totalHeight = border;
+ //Fanart Height
+ int fanartWidth = width - 2 * border;
+ int fanartHeight = 0;
+ if (numFanarts > 0 && series.fanarts[0].width > 0) {
+ fanartHeight = series.fanarts[0].height * ((double)fanartWidth / (double)series.fanarts[0].width);
+ if (fanartHeight > contentHeight - 2 * border) {
+ int fanartHeightOrig = fanartHeight;
+ fanartHeight = contentHeight - 2 * border;
+ fanartWidth = fanartWidth * ((double)fanartHeight / (double)fanartHeightOrig);
+ }
+ totalHeight += series.fanarts.size() * (fanartHeight + border);
+ }
+ //Poster Height
+ int posterWidth = (width - 4 * border) / 2;
+ int posterHeight = 0;
+ if (numPosters > 0 && series.posters[0].width > 0) {
+ posterHeight = series.posters[0].height * ((double)posterWidth / (double)series.posters[0].width);
+ }
+ if (numPosters > 0)
+ totalHeight += posterHeight + border;
+ if (numPosters == 3)
+ totalHeight += posterHeight + border;
+ //Banners Height
+ if (numBanners > 0)
+ totalHeight += (series.banners[0].height + border) * numBanners;
+
+ CreateContent(totalHeight);
+
+ cImageLoader imgLoader;
+ int yPic = border;
+ for (int i=0; i < numFanarts; i++) {
+ if (numBanners > i) {
+ if (imgLoader.LoadPoster(series.banners[i].path.c_str(), series.banners[i].width, series.banners[i].height) && Running()) {
+ pixmapContent->DrawImage(cPoint((width - series.banners[i].width) / 2, yPic), imgLoader.GetImage());
+ yPic += series.banners[i].height + border;
+ osd->Flush();
+ }
+ }
+ if (imgLoader.LoadPoster(series.fanarts[i].path.c_str(), fanartWidth, fanartHeight) && Running()) {
+ pixmapContent->DrawImage(cPoint((width - fanartWidth)/2, yPic), imgLoader.GetImage());
+ yPic += fanartHeight + border;
+ osd->Flush();
+ }
+ }
+ if (numPosters >= 1) {
+ if (imgLoader.LoadPoster(series.posters[0].path.c_str(), posterWidth, posterHeight) && Running()) {
+ pixmapContent->DrawImage(cPoint(border, yPic), imgLoader.GetImage());
+ osd->Flush();
+ yPic += posterHeight + border;
+ }
+ }
+ if (numPosters >= 2) {
+ if (imgLoader.LoadPoster(series.posters[1].path.c_str(), posterWidth, posterHeight) && Running()) {
+ pixmapContent->DrawImage(cPoint(2 * border + posterWidth, yPic - posterHeight - border), imgLoader.GetImage());
+ osd->Flush();
+ }
+ }
+ if (numPosters == 3) {
+ if (imgLoader.LoadPoster(series.posters[2].path.c_str(), posterWidth, posterHeight) && Running()) {
+ pixmapContent->DrawImage(cPoint((width - posterWidth) / 2, yPic), imgLoader.GetImage());
+ osd->Flush();
+ }
+ }
+}
+
+int cNopacitySeriesView::GetRandomPoster(void) {
+ int numPosters = series.posters.size();
+ if (numPosters == 0)
+ return -1;
+ srand((unsigned)time(NULL));
+ int randPoster = rand()%numPosters;
+ return randPoster;
+}
+
+void cNopacitySeriesView::KeyLeft(void) {
+ if (Running())
+ return;
+ activeView--;
+ if (activeView < 0)
+ activeView = mvtCount - 1;
+}
+
+void cNopacitySeriesView::KeyRight(void) {
+ if (Running())
+ return;
+ activeView = (activeView + 1) % mvtCount;
+}
+
+void cNopacitySeriesView::Action(void) {
+ ClearContent();
+ if (!headerDrawn) {
+ DrawHeader();
+ osd->Flush();
+ DrawHeaderBanner();
+ osd->Flush();
+ headerDrawn = true;
+ }
+ if (tabs.size() == 0) {
+ SetTabs();
+ }
+ DrawTabs();
+ int randomPoster = GetRandomPoster();
+ switch (activeView) {
+ case mvtInfo:
+ if (randomPoster >= 0) {
+ DrawFloatingContent(&infoText, &series.posters[randomPoster]);
+ } else
+ DrawContent(&infoText);
+ break;
+ case mvtAddInfo:
+ if (randomPoster >= 0)
+ DrawFloatingContent(&addInfoText, &series.posters[randomPoster]);
+ else
+ DrawContent(&addInfoText);
+ break;
+ case mvtCast:
+ DrawActors(&series.actors);
+ break;
+ case mvtOnlineInfo:
+ CreateTVDBInfo();
+ if ((series.seasonPoster.path.size() > 0) && series.episode.episodeImage.path.size() > 0)
+ DrawFloatingContent(&tvdbInfo, &series.episode.episodeImage, &series.seasonPoster);
+ else if (series.seasonPoster.path.size() > 0)
+ DrawFloatingContent(&tvdbInfo, &series.seasonPoster);
+ else if (series.episode.episodeImage.path.size() > 0)
+ DrawFloatingContent(&tvdbInfo, &series.episode.episodeImage);
+ else if (randomPoster >= 0)
+ DrawFloatingContent(&tvdbInfo, &series.posters[randomPoster]);
+ else
+ DrawContent(&tvdbInfo);
+ break;
+ case mvtImages:
+ DrawImages();
+ break;
+ }
+ DrawScrollbar();
+ osd->Flush();
+}
+
+/********************************************************************************************
+* cNopacityMovieView : cNopacityView
+********************************************************************************************/
+
+cNopacityMovieView::cNopacityMovieView(cOsd *osd, cImageCache *imgCache, int movieId) : cNopacityView(osd, imgCache) {
+ this->movieId = movieId;
+ pixmapHeaderPoster = NULL;
+ tabbed = true;
+}
+
+cNopacityMovieView::~cNopacityMovieView(void) {
+ Cancel(-1);
+ while (Active())
+ cCondWait::SleepMs(10);
+ if (pixmapHeaderPoster)
+ osd->DestroyPixmap(pixmapHeaderPoster);
+}
+
+void cNopacityMovieView::LoadMedia(void) {
+ static cPlugin *pScraper = GetScraperPlugin();
+ if (!pScraper || movieId < 1)
+ return;
+ movie.movieId = movieId;
+ pScraper->Service("GetMovie", &movie);
+}
+
+void cNopacityMovieView::SetTabs(void) {
+ tabs.push_back(tr("EPG Info"));
+ if (eventID > 0)
+ tabs.push_back(tr("Reruns"));
+ else
+ tabs.push_back(tr("Recording Information"));
+ tabs.push_back(tr("Cast"));
+ tabs.push_back(tr("TheTVDB Info"));
+ tabs.push_back(tr("Image Galery"));
+}
+
+void cNopacityMovieView::CreateMovieDBInfo(void) {
+ if (movieDBInfo.size() > 0)
+ return;
+ std::stringstream info;
+ info << tr("TheMovieDB Information") << ":\n\n";
+ if (movie.originalTitle.size() > 0) {
+ info << tr("Original Title") << ": " << movie.originalTitle << "\n\n";
+ }
+ if (movie.tagline.size() > 0) {
+ info << tr("Tagline") << ": " << movie.tagline << "\n\n";
+ }
+ if (movie.overview.size() > 0) {
+ info << tr("Overview") << ": " << movie.overview << "\n\n";
+ }
+ std::string strAdult = (movie.adult)?(tr("yes")):(tr("no"));
+ info << tr("Adult") << ": " << strAdult << "\n\n";
+ if (movie.collectionName.size() > 0) {
+ info << tr("Collection") << ": " << movie.collectionName << "\n\n";
+ }
+ if (movie.budget > 0) {
+ info << tr("Budget") << ": " << movie.budget << "$\n\n";
+ }
+ if (movie.revenue > 0) {
+ info << tr("Revenue") << ": " << movie.revenue << "$\n\n";
+ }
+ if (movie.genres.size() > 0) {
+ info << tr("Genre") << ": " << movie.genres << "\n\n";
+ }
+ if (movie.homepage.size() > 0) {
+ info << tr("Homepage") << ": " << movie.homepage << "\n\n";
+ }
+ if (movie.releaseDate.size() > 0) {
+ info << tr("Release Date") << ": " << movie.releaseDate << "\n\n";
+ }
+ if (movie.runtime > 0) {
+ info << tr("Runtime") << ": " << movie.runtime << " " << tr("minutes") << "\n\n";
+ }
+ if (movie.popularity > 0) {
+ info << tr("TheMovieDB Popularity") << ": " << movie.popularity << "\n\n";
+ }
+ if (movie.voteAverage > 0) {
+ info << tr("TheMovieDB Vote Average") << ": " << movie.voteAverage << "\n\n";
+ }
+ movieDBInfo = info.str();
+}
+
+void cNopacityMovieView::DrawHeaderPoster(void) {
+ if (movie.poster.width == 0 || movie.poster.height == 0 || movie.poster.path.size() == 0)
+ return;
+
+ int posterHeight = headerHeight - 10;
+ int posterWidth = movie.poster.width * ((double)posterHeight / (double)movie.poster.height);;
+ int posterX = width - posterWidth - border;
+ int posterY = (headerHeight - posterHeight) / 2;
+
+ if (!pixmapHeaderPoster) {
+ pixmapHeaderPoster = osd->CreatePixmap(3, cRect(x, y, width, headerHeight));
+ }
+ pixmapHeaderPoster->Fill(clrTransparent);
+
+ cImageLoader imgLoader;
+ if (imgLoader.LoadPoster(movie.poster.path.c_str(), posterWidth, posterHeight) && Running()) {
+ pixmapHeaderPoster->DrawImage(cPoint(posterX, posterY), imgLoader.GetImage());
+ }
+}
+
+void cNopacityMovieView::DrawImages(void) {
+ int totalHeight = border;
+ //Fanart Height
+ int fanartWidth = width - 2 * border;
+ int fanartHeight = 0;
+ if (movie.fanart.width > 0 && movie.fanart.height > 0 && movie.fanart.path.size() > 0) {
+ fanartHeight = movie.fanart.height * ((double)fanartWidth / (double)movie.fanart.width);
+ if (fanartHeight > contentHeight - 2 * border) {
+ int fanartHeightOrig = fanartHeight;
+ fanartHeight = contentHeight - 2 * border;
+ fanartWidth = fanartWidth * ((double)fanartHeight / (double)fanartHeightOrig);
+ }
+ totalHeight += fanartHeight + border;
+ }
+ //Collection Fanart Height
+ int collectionFanartWidth = width - 2 * border;
+ int collectionFanartHeight = 0;
+ if (movie.collectionFanart.width > 0 && movie.collectionFanart.height > 0 && movie.collectionFanart.path.size() > 0) {
+ collectionFanartHeight = movie.collectionFanart.height * ((double)collectionFanartWidth / (double)movie.collectionFanart.width);
+ if (collectionFanartHeight > contentHeight - 2 * border) {
+ int fanartHeightOrig = collectionFanartHeight;
+ collectionFanartHeight = contentHeight - 2 * border;
+ collectionFanartWidth = collectionFanartWidth * ((double)collectionFanartHeight / (double)fanartHeightOrig);
+ }
+ totalHeight += collectionFanartHeight + border;
+ }
+ //Poster Height
+ if (movie.poster.width > 0 && movie.poster.height > 0 && movie.poster.path.size() > 0) {
+ totalHeight += movie.poster.height + border;
+ }
+ //Collection Popster Height
+ if (movie.collectionPoster.width > 0 && movie.collectionPoster.height > 0 && movie.collectionPoster.path.size() > 0) {
+ totalHeight += movie.collectionPoster.height + border;
+ }
+
+ CreateContent(totalHeight);
+
+ cImageLoader imgLoader;
+ int yPic = border;
+ if (movie.fanart.width > 0 && movie.fanart.height > 0 && movie.fanart.path.size() > 0) {
+ if (imgLoader.LoadPoster(movie.fanart.path.c_str(), fanartWidth, fanartHeight) && Running()) {
+ pixmapContent->DrawImage(cPoint((width - fanartWidth)/2, yPic), imgLoader.GetImage());
+ yPic += fanartHeight + border;
+ osd->Flush();
+ }
+ }
+ if (movie.collectionFanart.width > 0 && movie.collectionFanart.height > 0 && movie.collectionFanart.path.size() > 0) {
+ if (imgLoader.LoadPoster(movie.collectionFanart.path.c_str(), collectionFanartWidth, collectionFanartHeight) && Running()) {
+ pixmapContent->DrawImage(cPoint((width - collectionFanartWidth)/2, yPic), imgLoader.GetImage());
+ yPic += collectionFanartHeight + border;
+ osd->Flush();
+ }
+ }
+ if (movie.poster.width > 0 && movie.poster.height > 0 && movie.poster.path.size() > 0) {
+ if (imgLoader.LoadPoster(movie.poster.path.c_str(), movie.poster.width, movie.poster.height) && Running()) {
+ pixmapContent->DrawImage(cPoint((width - movie.poster.width) / 2, yPic), imgLoader.GetImage());
+ yPic += movie.poster.height + border;
+ osd->Flush();
+ }
+ }
+ if (movie.collectionPoster.width > 0 && movie.collectionPoster.height > 0 && movie.collectionPoster.path.size() > 0) {
+ if (imgLoader.LoadPoster(movie.collectionPoster.path.c_str(), movie.collectionPoster.width, movie.collectionPoster.height) && Running()) {
+ pixmapContent->DrawImage(cPoint((width - movie.collectionPoster.width) / 2, yPic), imgLoader.GetImage());
+ yPic += movie.collectionPoster.height + border;
+ osd->Flush();
+ }
+ }
+}
+
+void cNopacityMovieView::KeyLeft(void) {
+ if (Running())
+ return;
+ activeView--;
+ if (activeView < 0)
+ activeView = mvtCount - 1;
+}
+
+void cNopacityMovieView::KeyRight(void) {
+ if (Running())
+ return;
+ activeView = (activeView + 1) % mvtCount;
+}
+
+void cNopacityMovieView::Action(void) {
+ ClearContent();
+ if (!headerDrawn) {
+ DrawHeader();
+ osd->Flush();
+ DrawHeaderPoster();
+ osd->Flush();
+ headerDrawn = true;
+ }
+ if (tabs.size() == 0) {
+ SetTabs();
+ }
+ DrawTabs();
+ bool posterAvailable = (movie.poster.path.size() > 0 && movie.poster.width > 0 && movie.poster.height > 0) ? true : false;
+ switch (activeView) {
+ case mvtInfo:
+ if (posterAvailable)
+ DrawFloatingContent(&infoText, &movie.poster);
+ else
+ DrawContent(&infoText);
+ break;
+ case mvtAddInfo:
+ if (posterAvailable)
+ DrawFloatingContent(&addInfoText, &movie.poster);
+ else
+ DrawContent(&addInfoText);
+ break;
+ case mvtCast:
+ DrawActors(&movie.actors);
+ break;
+ case mvtOnlineInfo:
+ CreateMovieDBInfo();
+ if (posterAvailable)
+ DrawFloatingContent(&movieDBInfo, &movie.poster);
+ else
+ DrawContent(&movieDBInfo);
+ break;
+ case mvtImages:
+ DrawImages();
+ break;
+ }
+ DrawScrollbar();
+ osd->Flush();
+}
+
+/********************************************************************************************
+* cNopacityTextView : cNopacityView
+********************************************************************************************/
+
+cNopacityTextView::cNopacityTextView(cOsd *osd, cImageCache *imgCache) : cNopacityView(osd, imgCache) {
+}
+
+cNopacityTextView::~cNopacityTextView(void) {
+ Cancel(-1);
+ while (Active())
+ cCondWait::SleepMs(10);
+}
+
+void cNopacityTextView::KeyLeft(void) {
+ if (!pixmapContent)
+ return;
+ int aktHeight = pixmapContent->DrawPort().Point().Y();
+ int screenHeight = pixmapContent->ViewPort().Height();
+ int newY = aktHeight + screenHeight;
+ if (newY > 0)
+ newY = 0;
+ pixmapContent->SetDrawPortPoint(cPoint(0, newY));
+ DrawScrollbar();
+ osd->Flush();
+}
+
+void cNopacityTextView::KeyRight(void) {
+ if (!pixmapContent)
+ return;
+ int aktHeight = pixmapContent->DrawPort().Point().Y();
+ int screenHeight = pixmapContent->ViewPort().Height();
+ int totalHeight = pixmapContent->DrawPort().Height();
+ int newY = aktHeight - screenHeight;
+ if ((-1)*newY > totalHeight - screenHeight)
+ newY = (-1)*(totalHeight - screenHeight);
+ pixmapContent->SetDrawPortPoint(cPoint(0, newY));
+ DrawScrollbar();
+ osd->Flush();
+}
+
+void cNopacityTextView::Action(void) {
+ if (pixmapContent)
+ return;
+ DrawContent(&infoText);
+ DrawScrollbar();
+ osd->Flush();
+}
diff --git a/detailview.h b/detailview.h
new file mode 100644
index 0000000..0a908bd
--- /dev/null
+++ b/detailview.h
@@ -0,0 +1,161 @@
+#ifndef __NOPACITY_DETAILVIEW_H
+#define __NOPACITY_DETAILVIEW_H
+
+#include <vector>
+#include <string>
+#include <sstream>
+#include <vdr/skins.h>
+#include "services/scraper2vdr.h"
+#include "services/epgsearch.h"
+#include "config.h"
+#include "imagecache.h"
+#include "imageloader.h"
+#include "helpers.h"
+
+enum eEPGViewTabs {
+ evtInfo = 0,
+ evtAddInfo,
+ evtImages,
+ evtCount
+};
+
+enum eMediaViewTabs {
+ mvtInfo = 0,
+ mvtAddInfo,
+ mvtCast,
+ mvtOnlineInfo,
+ mvtImages,
+ mvtCount
+};
+
+class cNopacityView : public cThread {
+protected:
+ cOsd *osd;
+ cImageCache *imgCache;
+ cPixmap *pixmapHeader;
+ cPixmap *pixmapHeaderLogo;
+ cPixmap *pixmapContent;
+ cPixmap *pixmapContentBack;
+ cPixmap *pixmapScrollbar;
+ cPixmap *pixmapScrollbarBack;
+ cPixmap *pixmapTabs;
+ cFont *font, *fontSmall, *fontHeader, *fontHeaderLarge;
+ int activeView;
+ bool scrollable;
+ bool tabbed;
+ int x, y;
+ int width, height;
+ int border;
+ int headerHeight, contentHeight, tabHeight;
+ std::vector<std::string> tabs;
+ std::string title;
+ std::string subTitle;
+ std::string dateTime;
+ std::string infoText;
+ std::string addInfoText;
+ const cChannel *channel;
+ int eventID;
+ std::string recFileName;
+ bool headerDrawn;
+ void DrawHeader(void);
+ void ClearContent(void);
+ void CreateContent(int fullHeight);
+ void DrawContent(std::string *text);
+ void DrawFloatingContent(std::string *infoText, cTvMedia *img, cTvMedia *img2 = NULL);
+ void CreateFloatingTextWrapper(cTextWrapper *twNarrow, cTextWrapper *twFull, std::string *text, int widthImg, int heightImg);
+ void DrawActors(std::vector<cActor> *actors);
+ void ClearScrollbar(void);
+ virtual void SetTabs(void) {};
+ void DrawTabs(void);
+public:
+ cNopacityView(cOsd *osd, cImageCache *imgCache);
+ virtual ~cNopacityView(void);
+ void SetTitle(const char *t) { title = t ? t : ""; };
+ void SetSubTitle(const char *s) { subTitle = s ? s : ""; };
+ void SetDateTime(const char *dt) { dateTime = dt; };
+ void SetInfoText(const char *i) { infoText = i ? i : ""; };
+ void SetAdditionalInfoText(std::string addInfo) { addInfoText = addInfo; };
+ void SetChannel(const cChannel *c) { channel = c; };
+ void SetEventID(int id) { eventID = id; };
+ void SetRecFileName(const char *name) { recFileName = name ? name : ""; };
+ virtual void LoadMedia(void) {};
+ void SetGeometry(int x, int y, int width, int height, int border, int headerHeight);
+ void SetFonts(void);
+ void SetScrollbarPixmaps(cPixmap *s, cPixmap *sb) { pixmapScrollbar = s; pixmapScrollbarBack = sb; };
+ virtual bool KeyUp(void);
+ virtual bool KeyDown(void);
+ virtual void KeyLeft(void) {};
+ virtual void KeyRight(void) {};
+ void DrawScrollbar(void);
+ virtual void Action(void) {};
+};
+
+class cNopacityEPGView : public cNopacityView {
+protected:
+ cPixmap *pixmapHeaderEPGImage;
+ std::vector<std::string> epgPics;
+ int numEPGPics;
+ int numTabs;
+ void SetTabs(void);
+ void DrawHeaderEPGImage(void);
+ void CheckEPGImages(void);
+ void DrawImages(void);
+public:
+ cNopacityEPGView(cOsd *osd, cImageCache *imgCache);
+ virtual ~cNopacityEPGView(void);
+ void KeyLeft(void);
+ void KeyRight(void);
+ void Action(void);
+};
+
+class cNopacitySeriesView : public cNopacityView {
+protected:
+ cPixmap *pixmapHeaderBanner;
+ int seriesId;
+ int episodeId;
+ cSeries series;
+ std::string tvdbInfo;
+ void SetTabs(void);
+ void CreateTVDBInfo(void);
+ void DrawHeaderBanner(void);
+ void DrawImages(void);
+ int GetRandomPoster(void);
+public:
+ cNopacitySeriesView(cOsd *osd, cImageCache *imgCache, int seriesId, int episodeId);
+ virtual ~cNopacitySeriesView(void);
+ void LoadMedia(void);
+ void KeyLeft(void);
+ void KeyRight(void);
+ void Action(void);
+};
+
+class cNopacityMovieView : public cNopacityView {
+protected:
+ cPixmap *pixmapHeaderPoster;
+ int movieId;
+ cMovie movie;
+ std::string movieDBInfo;
+ void SetTabs(void);
+ void CreateMovieDBInfo(void);
+ void DrawHeaderPoster(void);
+ void DrawImages(void);
+public:
+ cNopacityMovieView(cOsd *osd, cImageCache *imgCache, int movieId);
+ virtual ~cNopacityMovieView(void);
+ void LoadMedia(void);
+ void KeyLeft(void);
+ void KeyRight(void);
+ void Action(void);
+};
+
+class cNopacityTextView : public cNopacityView {
+protected:
+public:
+ cNopacityTextView(cOsd *osd, cImageCache *imgCache);
+ virtual ~cNopacityTextView(void);
+ void KeyLeft(void);
+ void KeyRight(void);
+ void Action(void);
+};
+
+#endif //__NOPACITY_DETAILVIEW_H
\ No newline at end of file
diff --git a/displaychannel.c b/displaychannel.c
index 4a8994c..ac9e179 100644
--- a/displaychannel.c
+++ b/displaychannel.c
@@ -1,556 +1,181 @@
-#include "symbols/audio.xpm"
-#include "symbols/dolbydigital.xpm"
-
+#include "config.h"
+#include "nopacity.h"
#include "displaychannel.h"
+#include "imageloader.h"
+#include "helpers.h"
+
+#include <vdr/osd.h>
+#include <vdr/menu.h>
-cNopacityDisplayChannel::cNopacityDisplayChannel(bool WithInfo) {
- config.setDynamicValues();
- withInfo = WithInfo;
+cNopacityDisplayChannel::cNopacityDisplayChannel(cImageCache *imgCache, bool WithInfo) {
+ if (firstDisplay) {
+ imgCache->CreateCacheDelayed();
+ firstDisplay = false;
+ doOutput = false;
+ return;
+ } else
+ doOutput = true;
groupSep = false;
present = NULL;
- lastSeen = -1;
- lastSignalDisplay = 0;
- lastSignalStrength = 0;
- lastSignalQuality = 0;
- lastScreenWidth = 0;
currentLast = 0;
channelChange = false;
- isRadioChannel = false;
- radioIconDrawn = false;
initial = true;
- FrameTime = config.channelFrameTime;
- FadeTime = config.channelFadeTime;
- lastDate = "";
- SetGeometry();
- CreatePixmaps();
- CreateFonts();
- DrawBackground();
- DrawSignalMeter();
-}
-
-cNopacityDisplayChannel::~cNopacityDisplayChannel() {
- Cancel(-1);
- while (Active())
- cCondWait::SleepMs(10);
- osd->DestroyPixmap(pixmapBackgroundTop);
- osd->DestroyPixmap(pixmapBackgroundBottom);
- osd->DestroyPixmap(pixmapLogo);
- osd->DestroyPixmap(pixmapChannelInfo);
- osd->DestroyPixmap(pixmapDate);
- if (withInfo) {
- osd->DestroyPixmap(pixmapBackgroundMiddle);
- osd->DestroyPixmap(pixmapProgressBar);
- osd->DestroyPixmap(pixmapEPGInfo);
- }
- if (pixmapScreenResolution)
- osd->DestroyPixmap(pixmapScreenResolution);
- osd->DestroyPixmap(pixmapFooter);
- osd->DestroyPixmap(pixmapStreamInfo);
- osd->DestroyPixmap(pixmapStreamInfoBack);
- if (config.displaySignalStrength && showSignal) {
- osd->DestroyPixmap(pixmapSignalStrength);
- osd->DestroyPixmap(pixmapSignalQuality);
- osd->DestroyPixmap(pixmapSignalMeter);
- osd->DestroyPixmap(pixmapSignalLabel);
- }
- if (config.displaySignalStrength && showSignal) {
- delete fontInfoline;
- }
- delete fontHeader;
- delete fontDate;
- delete fontEPG;
- delete fontEPGSmall;
- delete osd;
-}
+ FadeTime = config.GetValue("channelFadeTime");
+ FrameTime = FadeTime / 10;
-void cNopacityDisplayChannel::SetGeometry(void) {
- height = cOsd::OsdHeight() * config.channelHeight / 100;
- int top = cOsd::OsdTop() + cOsd::OsdHeight() - height - config.channelBorderBottom;
- osd = CreateOsd(cOsd::OsdLeft(), top, cOsd::OsdWidth(), height);
- switch (config.logoPosition) {
- case lpLeft:
- infoWidth = osd->Width() - (config.logoWidth + 2 * config.channelBorderVertical + config.logoBorder);
- infoX = config.logoWidth + config.channelBorderVertical + config.logoBorder;
- break;
- case lpRight:
- infoWidth = osd->Width() - (config.logoWidth + 2 * config.channelBorderVertical + config.logoBorder);
- infoX = config.channelBorderVertical;
- break;
- case lpNone:
- infoWidth = osd->Width() - 2 * config.channelBorderVertical;
- infoX = config.channelBorderVertical;
- break;
- }
- channelInfoWidth = infoWidth * 0.7;
- dateWidth = infoWidth - channelInfoWidth;
- channelInfoHeight = height * 0.2;
- if (channelInfoHeight%2 != 0)
- channelInfoHeight++;
- progressBarHeight = height * 0.1;
- streamInfoHeight = height * 0.2;
- if (streamInfoHeight%2 != 0)
- streamInfoHeight++;
- epgInfoHeight = height - channelInfoHeight - streamInfoHeight - progressBarHeight;
- epgInfoLineHeight = epgInfoHeight / 4;
- streamInfoY = channelInfoHeight + progressBarHeight + epgInfoHeight;
- iconSize = config.statusIconSize;
- iconsWidth = 5*iconSize;
-}
-
-void cNopacityDisplayChannel::CreatePixmaps(void) {
- int channelInfoY = 0;
- if (withInfo) {
- pixmapProgressBar = osd->CreatePixmap(2, cRect(infoX, channelInfoHeight, infoWidth, progressBarHeight));
- pixmapEPGInfo = osd->CreatePixmap(2, cRect(infoX, channelInfoHeight + progressBarHeight, infoWidth, epgInfoHeight));
- pixmapBackgroundMiddle = osd->CreatePixmap(1, cRect(infoX, channelInfoHeight, infoWidth, progressBarHeight + epgInfoHeight));
+ channelView = new cNopacityDisplayChannelView(imgCache);
+ if (!channelView->createOsd()) {
+ doOutput = false;
} else {
- channelInfoY = (height - channelInfoHeight) / 3;
- streamInfoY = (height - channelInfoHeight) / 3 + channelInfoHeight;
- }
- pixmapBackgroundTop = osd->CreatePixmap(1, cRect(infoX, channelInfoY, infoWidth, channelInfoHeight));
- pixmapBackgroundBottom = osd->CreatePixmap(1, cRect(infoX, streamInfoY, infoWidth, streamInfoHeight));
-
- pixmapChannelInfo = osd->CreatePixmap(2, cRect(infoX, channelInfoY, channelInfoWidth, channelInfoHeight));
- pixmapDate = osd->CreatePixmap(2, cRect(infoX + channelInfoWidth, channelInfoY, dateWidth, channelInfoHeight));
- pixmapFooter = osd->CreatePixmap(2, cRect(infoX, streamInfoY, infoWidth, streamInfoHeight));
- pixmapStreamInfo = osd->CreatePixmap(4, cRect(infoX + (infoWidth - iconsWidth - config.resolutionIconSize - 35), height - iconSize - 10, iconsWidth, iconSize));
- pixmapStreamInfoBack = osd->CreatePixmap(3, cRect(infoX + (infoWidth - iconsWidth - config.resolutionIconSize - 35), height - iconSize - 10, iconsWidth, iconSize));
-
- switch (config.logoPosition) {
- case lpLeft:
- pixmapLogo = osd->CreatePixmap(1, cRect(0, 0, config.logoWidth + 2 * config.logoBorder, height));
- break;
- case lpRight:
- pixmapLogo = osd->CreatePixmap(1, cRect(infoX + infoWidth, 0, config.logoWidth + 2 * config.logoBorder, height));
- break;
- case lpNone:
- pixmapLogo = osd->CreatePixmap(-1, cRect(0, 0, 1, 1));
- break;
- }
-
- if (config.channelFadeTime) {
- pixmapBackgroundTop->SetAlpha(0);
- pixmapBackgroundBottom->SetAlpha(0);
- pixmapChannelInfo->SetAlpha(0);
- pixmapDate->SetAlpha(0);
- pixmapLogo->SetAlpha(0);
- pixmapFooter->SetAlpha(0);
- pixmapStreamInfo->SetAlpha(0);
- pixmapStreamInfoBack->SetAlpha(0);
- if (withInfo) {
- pixmapBackgroundMiddle->SetAlpha(0);
- pixmapProgressBar->SetAlpha(0);
- pixmapEPGInfo->SetAlpha(0);
+ channelView->CreatePixmaps();
+ channelView->DrawBackground();
+ if (config.GetValue("displaySignalStrength")) {
+ channelView->DrawSignalMeter();
}
}
- if (withInfo) {
- pixmapProgressBar->Fill(clrTransparent);
- pixmapEPGInfo->Fill(clrTransparent);
- }
- pixmapScreenResolution = NULL;
-}
-
-void cNopacityDisplayChannel::CreateFonts(void) {
- fontHeader = cFont::CreateFont(config.fontName, channelInfoHeight - 8 + config.fontChannelHeaderSize);
- fontDate = cFont::CreateFont(config.fontName, channelInfoHeight/2 + config.fontChannelDateSize);
- fontEPG = cFont::CreateFont(config.fontName, epgInfoLineHeight + config.fontEPGSize);
- fontEPGSmall = cFont::CreateFont(config.fontName, epgInfoLineHeight - 6 + config.fontEPGSmallSize);
}
-void cNopacityDisplayChannel::DrawBackground(void){
-
- DrawBlendedBackground(pixmapBackgroundTop, Theme.Color(clrChannelBackground), Theme.Color(clrChannelBackBlend), true);
- if (withInfo)
- pixmapBackgroundMiddle->Fill(Theme.Color(clrChannelBackground));
- DrawBlendedBackground(pixmapBackgroundBottom, Theme.Color(clrChannelBackground), Theme.Color(clrChannelBackBlend), false);
-
- pixmapBackgroundTop->DrawEllipse(cRect(0, 0, channelInfoHeight/2, channelInfoHeight/2), clrTransparent, -2);
- pixmapBackgroundTop->DrawEllipse(cRect(infoWidth - channelInfoHeight/2, 0, channelInfoHeight/2, channelInfoHeight/2), clrTransparent, -1);
- pixmapBackgroundBottom->DrawEllipse(cRect(0, streamInfoHeight/2, streamInfoHeight/2, streamInfoHeight/2), clrTransparent, -3);
- pixmapBackgroundBottom->DrawEllipse(cRect(infoWidth - streamInfoHeight/2, streamInfoHeight/2, streamInfoHeight/2, streamInfoHeight/2), clrTransparent, -4);
-
- pixmapChannelInfo->Fill(clrTransparent);
- pixmapDate->Fill(clrTransparent);
- pixmapLogo->Fill(clrTransparent);
- pixmapFooter->Fill(clrTransparent);
- pixmapStreamInfo->Fill(clrTransparent);
- cImageLoader imgLoader;
- if (imgLoader.LoadIcon("skinIcons/channelsymbols", iconsWidth, iconSize)) {
- pixmapStreamInfo->DrawImage(cPoint(0, 0), imgLoader.GetImage());
- }
-
-}
-
-void cNopacityDisplayChannel::DrawDate(void) {
- cString curDate = DayDateTime();
- if (initial || channelChange || strcmp(curDate, lastDate)) {
- int strDateWidth = fontDate->Width(curDate);
- int strDateHeight = fontDate->Height();
- int x = dateWidth - strDateWidth - channelInfoHeight/2;
- int y = (channelInfoHeight - strDateHeight) / 2;
- pixmapDate->Fill(clrTransparent);
- pixmapDate->DrawText(cPoint(x, y), curDate, Theme.Color(clrChannelHead), clrTransparent, fontDate);
- lastDate = curDate;
- }
-}
-
-void cNopacityDisplayChannel::DrawIcons(const cChannel *Channel) {
- isRadioChannel = ((!Channel->Vpid())&&(Channel->Apid(0)))?true:false;
- pixmapStreamInfoBack->Fill(clrTransparent);
-
- int backX = 5;
- int backY = 5;
-
- tColor colVT = Theme.Color(clrChannelSymbolOff);
- if (Channel->Vpid() && Channel->Tpid()) {
- colVT = Theme.Color(clrChannelSymbolOn);
- }
- pixmapStreamInfoBack->DrawRectangle(cRect(backX, backY, iconSize-10, iconSize-10), colVT);
-
- backX += iconSize;
- tColor colStereo = Theme.Color(clrChannelSymbolOff);
- if (Channel->Apid(1)) {
- colStereo = Theme.Color(clrChannelSymbolOn);
- }
- pixmapStreamInfoBack->DrawRectangle(cRect(backX, backY, iconSize-10, iconSize-10), colStereo);
-
- backX += iconSize;
- tColor colDolby = Theme.Color(clrChannelSymbolOff);
- if (Channel->Dpid(0)) {
- colDolby = Theme.Color(clrChannelSymbolOn);
- }
- pixmapStreamInfoBack->DrawRectangle(cRect(backX, backY, iconSize-10, iconSize-10), colDolby);
-
- backX += iconSize;
- tColor colCrypted = Theme.Color(clrChannelSymbolOff);
- if (Channel->Ca()) {
- colCrypted = Theme.Color(clrChannelSymbolOn);
- }
- pixmapStreamInfoBack->DrawRectangle(cRect(backX, backY, iconSize-10, iconSize-10), colCrypted);
-
- backX += iconSize;
- tColor colRecording = Theme.Color(clrChannelSymbolOff);
- if (cRecordControls::Active()) {
- colRecording = Theme.Color(clrChannelRecActive);
- }
- pixmapStreamInfoBack->DrawRectangle(cRect(backX, backY, iconSize-10, iconSize-10), colRecording);
-}
-
-void cNopacityDisplayChannel::DrawScreenResolution(void) {
- int spacing = 10;
- int screenWidth = 0;
- int screenHeight = 0;
- double aspect = 0;
-
- if (!pixmapScreenResolution) {
- int x = infoX + infoWidth - config.resolutionIconSize - 2*spacing;
- int y = streamInfoY + streamInfoHeight - config.resolutionIconSize - 3;
- pixmapScreenResolution = osd->CreatePixmap(3, cRect(x, y, config.resolutionIconSize, config.resolutionIconSize));
- pixmapScreenResolution->Fill(clrTransparent);
- if ((initial)&&(config.channelFadeTime))
- pixmapScreenResolution->SetAlpha(0);
- }
-
- cImageLoader imgLoader;
- if (isRadioChannel) {
- if (!radioIconDrawn) {
- if (imgLoader.LoadIcon("skinIcons/radio", config.resolutionIconSize)) {
- pixmapScreenResolution->DrawImage(cPoint(0,0), imgLoader.GetImage());
- }
- lastScreenWidth = 0;
- radioIconDrawn = true;
- }
- } else {
- cDevice::PrimaryDevice()->GetVideoSize(screenWidth, screenHeight, aspect);
- if (screenWidth != lastScreenWidth) {
- cString iconName("");
- switch (screenWidth) {
- case 1920:
- case 1440:
- iconName = "skinIcons/hd1080i";
- break;
- case 1280:
- if (screenHeight == 720)
- iconName = "skinIcons/hd720p";
- else
- iconName = "skinIcons/hd1080i";
- break;
- case 720:
- iconName = "skinIcons/sd576i";
- break;
- default:
- iconName = "skinIcons/sd576i";
- break;
- }
- if (imgLoader.LoadIcon(*iconName, config.resolutionIconSize)) {
- pixmapScreenResolution->DrawImage(cPoint(0,0), imgLoader.GetImage());
- }
- lastScreenWidth = screenWidth;
- radioIconDrawn = false;
- }
- }
-}
-
-void cNopacityDisplayChannel::DrawSignalMeter(void) {
- signalWidth = infoWidth * 0.15;
- signalHeight = signalWidth *15 / 200;
- showSignal = false;
- if (config.displaySignalStrength) {
- cImageLoader imgLoader;
- cString signalStrength = "STR";
- cString signalQuality = "SNR";
- if (imgLoader.LoadIcon("skinIcons/signal", signalWidth, signalHeight, false)) {
- cImage imgSignal = imgLoader.GetImage();
- signalWidth = imgSignal.Width();
- signalHeight = imgSignal.Height();
- int signalMeterY = streamInfoY + (streamInfoHeight - 2*signalHeight - 5)/2;
- fontInfoline = cFont::CreateFont(config.fontName, signalHeight - 2);
- int labelWidth = max(fontInfoline->Width(*signalStrength), fontInfoline->Width(*signalQuality)) + 2;
- signalX = streamInfoHeight / 2 + labelWidth;
- showSignal = true;
- pixmapSignalStrength = osd->CreatePixmap(3, cRect(infoX + signalX, signalMeterY + 2, signalWidth + 2, signalHeight + 2));
- pixmapSignalQuality = osd->CreatePixmap(3, cRect(infoX + signalX, signalMeterY + signalHeight + 5, signalWidth + 2, signalHeight + 2));
- pixmapSignalMeter = osd->CreatePixmap(4, cRect(infoX + signalX + 1, signalMeterY + 3, signalWidth, 2*signalHeight + 3));
- pixmapSignalLabel = osd->CreatePixmap(3, cRect(infoX + streamInfoHeight / 2, signalMeterY + 2, labelWidth, 2*signalHeight + 3));
- pixmapSignalStrength->Fill(Theme.Color(clrProgressBarBack));
- pixmapSignalQuality->Fill(Theme.Color(clrProgressBarBack));
- pixmapSignalMeter->Fill(clrTransparent);
- pixmapSignalLabel->Fill(clrTransparent);
- if (config.channelFadeTime) {
- pixmapSignalStrength->SetAlpha(0);
- pixmapSignalQuality->SetAlpha(0);
- pixmapSignalMeter->SetAlpha(0);
- pixmapSignalLabel->SetAlpha(0);
- }
- pixmapSignalStrength->DrawImage(cPoint(1,1), imgSignal);
- pixmapSignalQuality->DrawImage(cPoint(1,1), imgSignal);
- pixmapSignalLabel->DrawText(cPoint(0, 2), *signalStrength, Theme.Color(clrChannelEPGInfo), clrTransparent, fontInfoline);
- pixmapSignalLabel->DrawText(cPoint(0, signalHeight + 4), *signalQuality, Theme.Color(clrChannelEPGInfo), clrTransparent, fontInfoline);
- }
- }
-}
-
-void cNopacityDisplayChannel::DrawSignal(void) {
- time_t Now = time(NULL);
- if (Now != lastSignalDisplay) {
- int SignalStrength = cDevice::ActualDevice()->SignalStrength();
- int SignalQuality = cDevice::ActualDevice()->SignalQuality();
- if ((SignalStrength == 0)&&(SignalQuality==0))
- return;
- if ((lastSignalStrength != SignalStrength) || (lastSignalQuality != SignalQuality)) {
- pixmapSignalMeter->Fill(clrTransparent);
- pixmapSignalMeter->DrawRectangle(cRect(double(SignalStrength) /100 * signalWidth, 0, signalWidth - (double)SignalStrength /100 * signalWidth + 1, signalHeight), Theme.Color(clrChannelBackground));
- pixmapSignalMeter->DrawRectangle(cRect(double(SignalQuality) /100 * signalWidth, signalHeight + 3, signalWidth - (double)SignalQuality / 100 * signalWidth + 1, signalHeight + 1), Theme.Color(clrChannelBackground));
- }
- lastSignalStrength = SignalStrength;
- lastSignalQuality = SignalQuality;
- lastSignalDisplay = Now;
- }
+cNopacityDisplayChannel::~cNopacityDisplayChannel() {
+ if (!doOutput)
+ return;
+ Cancel(-1);
+ while (Active())
+ cCondWait::SleepMs(10);
+ delete channelView;
}
void cNopacityDisplayChannel::SetChannel(const cChannel *Channel, int Number) {
- pixmapLogo->Fill(clrTransparent);
- pixmapChannelInfo->Fill(clrTransparent);
-
- if (withInfo) {
- pixmapProgressBar->Fill(clrTransparent);
- pixmapEPGInfo->Fill(clrTransparent);
- }
-
+ if (!doOutput)
+ return;
+
channelChange = true;
- lastSignalStrength = 0;
- lastSignalQuality = 0;
+ groupSep = false;
+
cString ChannelNumber("");
cString ChannelName("");
- groupSep = false;
+
if (Channel) {
ChannelName = Channel->Name();
if (!Channel->GroupSep()) {
- DrawIcons(Channel);
ChannelNumber = cString::sprintf("%d%s", Channel->Number(), Number ? "-" : "");
- } else
+ } else {
groupSep = true;
- } else if (Number) {
+ }
+ } else if (Number) {
ChannelNumber = cString::sprintf("%d-", Number);
} else {
ChannelName = ChannelString(NULL, 0);
}
-
- cString channelString = cString::sprintf("%s %s", *ChannelNumber, *ChannelName);
-
+ channelView->ClearChannelLogo();
+ channelView->ClearChannelName();
+ channelView->ClearEPGInfo();
+ channelView->ClearStatusIcons();
+ channelView->ClearSourceInfo();
if (!groupSep) {
- pixmapChannelInfo->DrawText(cPoint(channelInfoHeight/2, (channelInfoHeight-fontHeader->Height())/2), channelString, Theme.Color(clrChannelHead), clrTransparent, fontHeader);
- if (config.logoPosition != lpNone) {
- cImageLoader imgLoader;
- if (imgLoader.LoadLogo(*ChannelName)) {
- pixmapLogo->DrawImage(cPoint(config.logoBorder, (height-config.logoHeight)/2), imgLoader.GetImage());
- }
- }
+ channelView->DrawChannelName(ChannelNumber, ChannelName);
+ if (Channel && config.GetValue("logoPosition") != lpNone)
+ channelView->DrawChannelLogo(Channel);
+ if (Channel)
+ channelView->DrawStatusIcons(Channel);
} else {
- if (withInfo) {
- pixmapProgressBar->Fill(clrTransparent);
- pixmapEPGInfo->Fill(clrTransparent);
- pixmapEPGInfo->DrawText(cPoint(channelInfoHeight/2, (epgInfoHeight-fontHeader->Height())/2 - fontHeader->Height()/2), channelString, Theme.Color(clrChannelHead), clrTransparent, fontHeader);
- } else {
- pixmapChannelInfo->DrawText(cPoint(channelInfoHeight/2, (channelInfoHeight-fontHeader->Height())/2), channelString, Theme.Color(clrChannelHead), clrTransparent, fontHeader);
- }
- if (config.logoPosition != lpNone) {
- cImageLoader imgLoader;
- cString separator = cString::sprintf("separatorlogos/%s", *ChannelName);
- if (imgLoader.LoadLogo(*separator)) {
- pixmapLogo->DrawImage(cPoint(config.logoBorder, (height-config.logoHeight)/2), imgLoader.GetImage());
- } else if (imgLoader.LoadIcon("skinIcons/Channelseparator", config.logoHeight)) {
- pixmapLogo->DrawImage(cPoint(config.logoBorder + (config.logoWidth - config.logoHeight)/2, (height-config.logoHeight)/2), imgLoader.GetImage());
- }
- }
+ channelView->HideSignalMeter();
+ channelView->ClearProgressBar();
+ if (Channel)
+ channelView->DrawChannelGroups(Channel, ChannelName);
}
+
}
void cNopacityDisplayChannel::SetEvents(const cEvent *Present, const cEvent *Following) {
- if (!withInfo)
+ if (!doOutput)
return;
- if (present != Present)
- lastSeen = -1;
present = Present;
-
- if (Present || Following) {
- pixmapProgressBar->Fill(clrTransparent);
- pixmapEPGInfo->Fill(clrTransparent);
+ channelView->ClearProgressBar();
+ if (!groupSep) {
+ channelView->DrawProgressbarBackground();
+ channelView->ClearEPGInfo();
}
- int indent = 20;
-
- for (int i = 0; i < 2; i++) {
- const cEvent *e = !i ? Present : Following;
- int y = !i ? 0 : 2;
- if (e) {
- cString startTime = e->GetTimeString();
- int startTimeWidth = fontEPG->Width(*startTime);
- int epgWidth = fontEPG->Width(e->Title());
- int epgWidthShort = fontEPGSmall->Width(e->ShortText());
- cString strSeen("");
- if (i==0) {
- if (config.progressCurrentSchedule == 0) {
- int seen = (int)(time(NULL) - e->StartTime())/60;
- strSeen = cString::sprintf("%d/%dmin", seen, e->Duration()/60);
- } else if (config.progressCurrentSchedule == 1) {
- int remaining = (int)(e->EndTime() - time(NULL))/60;
- strSeen = cString::sprintf("-%d/%dmin", remaining, e->Duration()/60);
- }
- } else {
- strSeen = cString::sprintf("%dmin", e->Duration()/60);
- }
- int seenWidth = fontEPG->Width(*strSeen);
- int space = infoWidth - 9*indent - seenWidth - startTimeWidth - config.resolutionIconSize;
- cString strEPG;
- if (space < epgWidth) {
- cTextWrapper epgInfoWrapper(e->Title(), fontEPG, space);
- strEPG = epgInfoWrapper.GetLine(0);
- strEPG = cString::sprintf("%s...", *strEPG);
- } else {
- strEPG = e->Title();
- }
- cString strEPGShort("");
- int spaceShort = infoWidth - 6*indent - startTimeWidth - config.resolutionIconSize;
- if (spaceShort < epgWidthShort) {
- cTextWrapper epgInfoWrapper(e->ShortText(), fontEPGSmall, spaceShort);
- strEPGShort = epgInfoWrapper.GetLine(0);
- strEPGShort = cString::sprintf("%s...", *strEPGShort);
- } else {
- strEPGShort = e->ShortText();
- }
- tColor fontColor = (i==0)?Theme.Color(clrChannelEPG):Theme.Color(clrChannelEPGInfo);
- pixmapEPGInfo->DrawText(cPoint(indent, y * epgInfoLineHeight), *startTime, fontColor, clrTransparent, fontEPG);
- pixmapEPGInfo->DrawText(cPoint(2 * indent + startTimeWidth, y * epgInfoLineHeight), *strEPG, fontColor, clrTransparent, fontEPG);
- pixmapEPGInfo->DrawText(cPoint(2 * indent + startTimeWidth, (y+1) * epgInfoLineHeight + 3), *strEPGShort, fontColor, clrTransparent, fontEPGSmall);
- int x = infoWidth - indent - seenWidth - config.resolutionIconSize - indent;
- pixmapEPGInfo->DrawText(cPoint(x, y * epgInfoLineHeight), *strSeen, fontColor, clrTransparent, fontEPG);
+ if (Present) {
+ if (!groupSep) {
+ SetProgressBar(Present);
}
- }
-}
-
-void cNopacityDisplayChannel::DrawProgressBar(int Current, int Total) {
- if ((Current < currentLast + 3) && !channelChange)
- return;
- currentLast = Current;
- if ((Current > 0) || (Total > 0)) {
- int barHeight = pixmapProgressBar->ViewPort().Height()-8;
- if (barHeight%2 != 0)
- barHeight++;
- int barFullWidth = pixmapProgressBar->ViewPort().Width() - 20 - barHeight;
- double percentSeen = ((double)Current) / (double)Total;
-
- pixmapProgressBar->DrawEllipse(cRect(9, 3, barHeight+2, barHeight+2), Theme.Color(clrProgressBarBack));
- pixmapProgressBar->DrawEllipse(cRect(9 + barFullWidth, 3, barHeight+2, barHeight+2), Theme.Color(clrProgressBarBack));
- pixmapProgressBar->DrawRectangle(cRect( 9 + barHeight/2, 3, barFullWidth, barHeight+1), Theme.Color(clrProgressBarBack));
-
- pixmapProgressBar->DrawEllipse(cRect(10, 4, barHeight, barHeight), Theme.Color(clrProgressBarBlend));
- if (Current > 0) {
- tColor colAct = DrawProgressbarBackground(10 + barHeight/2, 4, barFullWidth * percentSeen, barHeight-1);
- pixmapProgressBar->DrawEllipse(cRect(10 + barFullWidth * percentSeen, 4, barHeight, barHeight), colAct);
+ bool recCurrent = false;
+ eTimerMatch TimerMatch = tmNone;
+ const cTimer *Timer = Timers.GetMatch(Present, &TimerMatch);
+ if (Timer && Timer->Recording()) {
+ recCurrent = true;
}
+ channelView->DrawEPGInfo(Present, true, recCurrent);
}
+ if (Following) {
+ bool recFollowing = Following->HasTimer();
+ channelView->DrawEPGInfo(Following, false, recFollowing);
+ }
+ if (config.GetValue("displayPoster"))
+ channelView->DrawPoster(Present, initial);
}
-tColor cNopacityDisplayChannel::DrawProgressbarBackground(int left, int top, int width, int height) {
-
- tColor clr1 = Theme.Color(clrProgressBar);
- tColor clr2 = Theme.Color(clrProgressBarBlend);
- tColor clr = 0x00000000;
- width = (width==0)?1:width;
- int step = width / 256;
- int alpha = 0x0;
- int alphaStep;
- int maximum = 0;
- if (step == 0) { //width < 256
- step = 1;
- alphaStep = 256 / width;
- maximum = width;
- } else { //width > 256
- alphaStep = 0x1;
- maximum = 256;
- }
- int x = 0;
- for (int i = 0; i < maximum; i++) {
- x = left + i*step;
- clr = AlphaBlend(clr1, clr2, alpha);
- pixmapProgressBar->DrawRectangle(cRect(x,top,step,height), clr);
- alpha += alphaStep;
+void cNopacityDisplayChannel::SetProgressBar(const cEvent *present) {
+ int Current = 0;
+ int Total = 0;
+ time_t t = time(NULL);
+ if (t > present->StartTime())
+ Current = t - present->StartTime();
+ Total = present->Duration();
+ if ((Current > currentLast + 3) || initial || channelChange){
+ currentLast = Current;
+ channelView->DrawProgressBar(Current, Total);
}
- if (step > 0) {
- int rest = width - step*256;
- pixmapProgressBar->DrawRectangle(cRect(left+step*256, top, rest, height), clr);
- }
- return clr;
}
+
void cNopacityDisplayChannel::SetMessage(eMessageType Type, const char *Text) {
+ channelView->ClearChannelLogo();
+ channelView->ClearChannelName();
+ channelView->ClearEPGInfo();
+ channelView->ClearStatusIcons();
+ channelView->ClearSourceInfo();
+ channelView->ClearProgressBar();
+ channelView->HideSignalMeter();
+ channelView->DisplayMessage(Text);
+ groupSep = true;
}
void cNopacityDisplayChannel::Flush(void) {
- DrawDate();
+ if (!doOutput)
+ return;
+ if (initial || channelChange)
+ channelView->DrawDate();
+
+ if (present) {
+ SetProgressBar(present);
+ } else
+ channelView->ClearProgressBar();
+
if (!groupSep)
- DrawScreenResolution();
- if (config.displaySignalStrength && showSignal) {
- DrawSignal();
- }
- if (withInfo) {
- int Current = 0;
- int Total = 0;
- if (present) {
- time_t t = time(NULL);
- if (t > present->StartTime())
- Current = t - present->StartTime();
- Total = present->Duration();
- DrawProgressBar(Current, Total);
- }
- }
+ channelView->DrawScreenResolution();
+ else
+ channelView->ClearStatusIcons();
+
+ if (config.GetValue("displaySignalStrength") && !groupSep) {
+ channelView->ShowSignalMeter();
+ channelView->DrawSignal();
+ } else
+ channelView->HideSignalMeter();
+
+ if (config.GetValue("displaySourceInfo") && !groupSep) {
+ channelView->ClearSourceInfo();
+ channelView->DrawSourceInfo();
+ } else
+ channelView->ClearSourceInfo();
+
if (initial) {
- if (config.channelFadeTime)
+ if (config.GetValue("channelFadeTime"))
Start();
}
initial = false;
channelChange = false;
- osd->Flush();
+ channelView->Flush();
}
void cNopacityDisplayChannel::Action(void) {
@@ -560,30 +185,10 @@ void cNopacityDisplayChannel::Action(void) {
cPixmap::Lock();
double t = min(double(Now - Start) / FadeTime, 1.0);
int Alpha = t * ALPHA_OPAQUE;
- pixmapBackgroundTop->SetAlpha(Alpha);
- pixmapBackgroundBottom->SetAlpha(Alpha);
- pixmapLogo->SetAlpha(Alpha);
- pixmapChannelInfo->SetAlpha(Alpha);
- pixmapDate->SetAlpha(Alpha);
- if (withInfo) {
- pixmapBackgroundMiddle->SetAlpha(Alpha);
- pixmapProgressBar->SetAlpha(Alpha);
- pixmapEPGInfo->SetAlpha(Alpha);
- }
- pixmapFooter->SetAlpha(Alpha);
- pixmapStreamInfo->SetAlpha(Alpha);
- pixmapStreamInfoBack->SetAlpha(Alpha);
- if (pixmapScreenResolution)
- pixmapScreenResolution->SetAlpha(Alpha);
- if (config.displaySignalStrength && showSignal) {
- pixmapSignalStrength->SetAlpha(Alpha);
- pixmapSignalQuality->SetAlpha(Alpha);
- pixmapSignalMeter->SetAlpha(Alpha);
- pixmapSignalLabel->SetAlpha(Alpha);
- }
- if (Running())
- osd->Flush();
+ channelView->SetAlpha(Alpha);
cPixmap::Unlock();
+ if (Running())
+ channelView->Flush();
int Delta = cTimeMs::Now() - Now;
if (Running() && (Delta < FrameTime))
cCondWait::SleepMs(FrameTime - Delta);
diff --git a/displaychannel.h b/displaychannel.h
index 3a5f924..65b6884 100644
--- a/displaychannel.h
+++ b/displaychannel.h
@@ -1,20 +1,18 @@
#ifndef __NOPACITY_DISPLAYCHANNEL_H
#define __NOPACITY_DISPLAYCHANNEL_H
-enum eLogoPosition {lpNone = 0, lpLeft, lpRight};
+#include <vdr/thread.h>
+#include "displaychannelview.h"
class cNopacityDisplayChannel : public cSkinDisplayChannel, cThread {
private:
+ cNopacityDisplayChannelView *channelView;
+ bool doOutput;
int FrameTime;
int FadeTime;
- bool withInfo;
bool initial;
bool groupSep;
bool channelChange;
- bool isRadioChannel;
- bool radioIconDrawn;
- cString lastDate;
- int lastSeen;
time_t lastSignalDisplay;
int lastSignalStrength;
int lastSignalQuality;
@@ -22,56 +20,10 @@ private:
int currentLast;
bool showSignal;
const cEvent *present;
- cOsd *osd;
- cPixmap *pixmapBackgroundTop;
- cPixmap *pixmapBackgroundMiddle;
- cPixmap *pixmapBackgroundBottom;
- cPixmap *pixmapChannelInfo;
- cPixmap *pixmapDate;
- cPixmap *pixmapLogo;
- cPixmap *pixmapProgressBar;
- cPixmap *pixmapEPGInfo;
- cPixmap *pixmapFooter;
- cPixmap *pixmapStreamInfo;
- cPixmap *pixmapStreamInfoBack;
- cPixmap *pixmapSignalStrength;
- cPixmap *pixmapSignalQuality;
- cPixmap *pixmapSignalMeter;
- cPixmap *pixmapSignalLabel;
- cPixmap *pixmapScreenResolution;
- int height;
- int infoWidth;
- int infoX;
- int channelInfoWidth;
- int channelInfoHeight;
- int dateWidth;
- int progressBarHeight;
- int epgInfoHeight;
- int epgInfoLineHeight;
- int streamInfoHeight;
- int streamInfoY;
- int iconSize;
- int iconsWidth;
- int signalWidth, signalHeight, signalX;
- cFont *fontHeader;
- cFont *fontDate;
- cFont *fontEPG;
- cFont *fontEPGSmall;
- cFont *fontInfoline;
virtual void Action(void);
- void SetGeometry(void);
- void CreatePixmaps(void);
- void CreateFonts(void);
- void DrawBackground(void);
- void DrawDate(void);
- void DrawProgressBar(int Current, int Total);
- tColor DrawProgressbarBackground(int left, int top, int width, int height);
- void DrawIcons(const cChannel *channel);
- void DrawScreenResolution(void);
- void DrawSignalMeter(void);
- void DrawSignal(void);
+ void SetProgressBar(const cEvent *present);
public:
- cNopacityDisplayChannel(bool WithInfo);
+ cNopacityDisplayChannel(cImageCache *imgCache, bool WithInfo);
virtual ~cNopacityDisplayChannel();
virtual void SetChannel(const cChannel *Channel, int Number);
virtual void SetEvents(const cEvent *Present, const cEvent *Following);
diff --git a/displaychannelview.c b/displaychannelview.c
new file mode 100644
index 0000000..c4e8ddc
--- /dev/null
+++ b/displaychannelview.c
@@ -0,0 +1,843 @@
+#include "services/scraper2vdr.h"
+#include "displaychannelview.h"
+#include "config.h"
+#include "helpers.h"
+#include "fontmanager.h"
+#include "geometrymanager.h"
+#include "imageloader.h"
+#include <vdr/menu.h>
+
+cNopacityDisplayChannelView::cNopacityDisplayChannelView(cImageCache *imgCache) {
+ this->imgCache = imgCache;
+ osd = NULL;
+ lastDate = "";
+ isRadioChannel = false;
+ statusIconBorder = 5;
+ statusIconSize = geoManager->channelFooterHeight - 2 * statusIconBorder;
+ signalWidth = 0;
+ signalHeight = 0;
+ signalX = 0;
+ lastSignalDisplay = 0;
+ lastSignalStrength = 0;
+ lastSignalQuality = 0;
+ pixmapSignalMeter = NULL;
+ pixmapSignalStrength = NULL;
+ pixmapSignalQuality = NULL;
+ pixmapSignalLabel = NULL;
+ pixmapPoster = NULL;
+}
+
+cNopacityDisplayChannelView::~cNopacityDisplayChannelView() {
+ osd->DestroyPixmap(pixmapBackground);
+ osd->DestroyPixmap(pixmapTop);
+ osd->DestroyPixmap(pixmapLogo);
+ osd->DestroyPixmap(pixmapLogoBackground);
+ osd->DestroyPixmap(pixmapChannelName);
+ osd->DestroyPixmap(pixmapDate);
+ osd->DestroyPixmap(pixmapProgressBar);
+ osd->DestroyPixmap(pixmapEPGInfo);
+ osd->DestroyPixmap(pixmapStatusIcons);
+ osd->DestroyPixmap(pixmapStatusIconsBackground);
+ osd->DestroyPixmap(pixmapSourceInfo);
+ if (pixmapSignalStrength)
+ osd->DestroyPixmap(pixmapSignalStrength);
+ if (pixmapSignalQuality)
+ osd->DestroyPixmap(pixmapSignalQuality);
+ if (pixmapSignalMeter)
+ osd->DestroyPixmap(pixmapSignalMeter);
+ if (pixmapSignalLabel)
+ osd->DestroyPixmap(pixmapSignalLabel);
+ if (pixmapPoster)
+ osd->DestroyPixmap(pixmapPoster);
+ delete osd;
+}
+
+bool cNopacityDisplayChannelView::createOsd(void) {
+ osd = CreateOsd(geoManager->osdLeft,
+ geoManager->osdTop,
+ geoManager->osdWidth,
+ geoManager->osdHeight);
+ if (!osd)
+ return false;
+ return true;
+}
+
+void cNopacityDisplayChannelView::CreatePixmaps(void) {
+ pixmapBackground = osd->CreatePixmap(1,
+ cRect(geoManager->channelX,
+ geoManager->channelTop,
+ geoManager->channelWidth,
+ geoManager->channelHeight)
+ );
+ pixmapTop = osd->CreatePixmap(7,
+ cRect(geoManager->channelX,
+ geoManager->channelTop,
+ geoManager->channelWidth,
+ geoManager->channelHeight)
+ );
+ pixmapLogo = osd->CreatePixmap(3,
+ cRect(geoManager->channelX + geoManager->channelLogoX,
+ geoManager->channelLogoY,
+ geoManager->channelLogoWidth,
+ geoManager->channelLogoHeight)
+ );
+ pixmapLogoBackground = osd->CreatePixmap(2,
+ cRect(geoManager->channelX + geoManager->channelLogoX,
+ geoManager->channelLogoY,
+ geoManager->channelLogoWidth,
+ geoManager->channelLogoHeight)
+ );
+ pixmapChannelName = osd->CreatePixmap(2,
+ cRect(geoManager->channelX + geoManager->channelContentX,
+ geoManager->channelTop,
+ geoManager->channelChannelNameWidth,
+ geoManager->channelHeaderHeight)
+ );
+ pixmapDate = osd->CreatePixmap(2,
+ cRect(geoManager->channelX + geoManager->channelContentX +
+ geoManager->channelChannelNameWidth,
+ geoManager->channelTop,
+ geoManager->channelDateWidth,
+ geoManager->channelHeaderHeight)
+ );
+ pixmapProgressBar = osd->CreatePixmap(2,
+ cRect(geoManager->channelX + geoManager->channelContentX,
+ geoManager->channelTop + geoManager->channelHeaderHeight,
+ geoManager->channelContentWidth,
+ geoManager->channelProgressBarHeight)
+ );
+ pixmapEPGInfo = osd->CreatePixmap(2,
+ cRect(geoManager->channelX + geoManager->channelContentX,
+ geoManager->channelTop + geoManager->channelHeaderHeight +
+ geoManager->channelProgressBarHeight,
+ geoManager->channelContentWidth,
+ geoManager->channelEpgInfoHeight)
+ );
+ int statusIconsWidth = 8 * statusIconSize + 6 * statusIconBorder;
+ int statusIconX = geoManager->osdWidth
+ - config.GetValue("channelBorderVertical")
+ - statusIconsWidth
+ - 3*statusIconBorder;
+ if (config.GetValue("logoPosition") == lpRight)
+ statusIconX -= geoManager->channelLogoWidthTotal;
+
+ pixmapStatusIcons = osd->CreatePixmap(3,
+ cRect(statusIconX,
+ geoManager->channelTop + geoManager->channelHeaderHeight +
+ geoManager->channelProgressBarHeight +
+ geoManager->channelEpgInfoHeight,
+ statusIconsWidth,
+ geoManager->channelFooterHeight)
+ );
+ pixmapStatusIconsBackground = osd->CreatePixmap(2,
+ cRect(statusIconX - 2*statusIconBorder,
+ geoManager->channelTop + geoManager->channelHeaderHeight +
+ geoManager->channelProgressBarHeight +
+ geoManager->channelEpgInfoHeight + 1,
+ statusIconsWidth + 3*statusIconBorder,
+ geoManager->channelFooterHeight - 2)
+ );
+ int sourceInfoX = geoManager->channelX + geoManager->channelContentX + 10;
+ if (config.GetValue("displaySignalStrength"))
+ sourceInfoX +=geoManager->channelWidth * 0.2;
+ pixmapSourceInfo = osd->CreatePixmap(2,
+ cRect(sourceInfoX,
+ geoManager->channelTop + geoManager->channelHeaderHeight +
+ geoManager->channelProgressBarHeight +
+ geoManager->channelEpgInfoHeight,
+ statusIconX - sourceInfoX,
+ geoManager->channelFooterHeight)
+ );
+
+ if (config.GetValue("channelFadeTime")) {
+ pixmapBackground->SetAlpha(0);
+ pixmapTop->SetAlpha(0);
+ pixmapLogo->SetAlpha(0);
+ pixmapLogoBackground->SetAlpha(0);
+ pixmapChannelName->SetAlpha(0);
+ pixmapDate->SetAlpha(0);
+ pixmapProgressBar->SetAlpha(0);
+ pixmapEPGInfo->SetAlpha(0);
+ pixmapStatusIcons->SetAlpha(0);
+ pixmapStatusIconsBackground->SetAlpha(0);
+ pixmapSourceInfo->SetAlpha(0);
+ } else {
+ int alphaBack = (100 - config.GetValue("channelBackgroundTransparency"))*255/100;
+ pixmapBackground->SetAlpha(alphaBack);
+ }
+}
+
+void cNopacityDisplayChannelView::SetAlpha(int alpha) {
+ int alphaBack = (100 - config.GetValue("channelBackgroundTransparency"))*alpha/100;
+ pixmapBackground->SetAlpha(alphaBack);
+ pixmapTop->SetAlpha(alpha);
+ pixmapLogo->SetAlpha(alpha);
+ pixmapLogoBackground->SetAlpha(alpha);
+ pixmapChannelName->SetAlpha(alpha);
+ pixmapDate->SetAlpha(alpha);
+ pixmapProgressBar->SetAlpha(alpha);
+ pixmapEPGInfo->SetAlpha(alpha);
+ pixmapStatusIcons->SetAlpha(alpha);
+ pixmapStatusIconsBackground->SetAlpha(alpha);
+ pixmapSourceInfo->SetAlpha(alpha);
+ if (pixmapSignalStrength)
+ pixmapSignalStrength->SetAlpha(alpha);
+ if (pixmapSignalQuality)
+ pixmapSignalQuality->SetAlpha(alpha);
+ if (pixmapSignalMeter)
+ pixmapSignalMeter->SetAlpha(alpha);
+ if (pixmapSignalLabel)
+ pixmapSignalLabel->SetAlpha(alpha);
+ if (pixmapPoster)
+ pixmapPoster->SetAlpha(alpha);
+}
+
+void cNopacityDisplayChannelView::DrawBackground(void) {
+ pixmapBackground->Fill(clrTransparent);
+ pixmapTop->Fill(clrTransparent);
+ if (config.GetValue("displayType") == dtGraphical) {
+ cImage *imgBack = imgCache->GetSkinElement(seChannelBackground);
+ if (imgBack)
+ pixmapBackground->DrawImage(cPoint(0,0), *imgBack);
+ cImage *imgTop = imgCache->GetSkinElement(seChannelTop);
+ if (imgTop)
+ pixmapTop->DrawImage(cPoint(0,0), *imgTop);
+ } else {
+ int backgroundX;
+ int backgroundWidth;
+ if (config.GetValue("backgroundStyle") == bsFull) {
+ backgroundX = 0;
+ backgroundWidth = geoManager->channelWidth;
+ } else {
+ backgroundX = geoManager->channelContentX;
+ backgroundWidth = geoManager->channelContentWidth;
+ }
+ pixmapBackground->DrawRectangle(cRect(backgroundX,
+ 0,
+ backgroundWidth,
+ geoManager->channelHeight),
+ Theme.Color(clrChannelBackground));
+ if (config.GetValue("displayType") == dtBlending) {
+ DrawBlendedBackground(pixmapBackground,
+ backgroundX,
+ backgroundWidth,
+ Theme.Color(clrChannelBackground), Theme.Color(clrChannelBackBlend),
+ true);
+ DrawBlendedBackground(pixmapBackground,
+ backgroundX,
+ backgroundWidth,
+ Theme.Color(clrChannelBackground), Theme.Color(clrChannelBackBlend),
+ false);
+ }
+ if (config.GetValue("roundedCornersChannel")) {
+ int cornerRadius = geoManager->channelHeaderHeight/2;
+ if (cornerRadius > 2) {
+ DrawRoundedCorners(pixmapBackground,
+ cornerRadius,
+ backgroundX,
+ 0,
+ backgroundWidth,
+ geoManager->channelHeight);
+ }
+ }
+ }
+}
+
+void cNopacityDisplayChannelView::DrawChannelLogo(const cChannel *Channel) {
+ if (config.GetValue("displayType") != dtFlat && config.GetValue("channelUseLogoBackground")) {
+ cImage *imgLogoBack = imgCache->GetSkinElement(seChannelLogoBack);
+ if (imgLogoBack)
+ pixmapLogoBackground->DrawImage(cPoint(0,0), *imgLogoBack);
+ }
+ cImage *imgLogo = imgCache->GetLogo(ctLogo, Channel);
+ if (imgLogo) {
+ pixmapLogo->DrawImage(cPoint(0,0), *imgLogo);
+ }
+}
+
+void cNopacityDisplayChannelView::ClearChannelLogo(void) {
+ pixmapLogoBackground->Fill(clrTransparent);
+ pixmapLogo->Fill(clrTransparent);
+}
+
+
+void cNopacityDisplayChannelView::DrawChannelName(cString number, cString name) {
+ cString channelString = cString::sprintf("%s %s", *number, *name);
+ pixmapChannelName->DrawText(cPoint(geoManager->channelHeaderHeight/2,
+ (geoManager->channelHeaderHeight-fontManager->channelHeader->Height())/2),
+ channelString,
+ Theme.Color(clrChannelHead),
+ clrTransparent,
+ fontManager->channelHeader);
+}
+
+void cNopacityDisplayChannelView::ClearChannelName(void) {
+ pixmapChannelName->Fill(clrTransparent);
+}
+
+
+void cNopacityDisplayChannelView::DrawDate(void) {
+ cString curDate = DayDateTime();
+ if (strcmp(curDate, lastDate)) {
+ int strDateWidth = fontManager->channelDate->Width(curDate);
+ int strDateHeight = fontManager->channelDate->Height();
+ int x = geoManager->channelDateWidth - strDateWidth - geoManager->channelHeaderHeight/2;
+ int y = (geoManager->channelHeaderHeight - strDateHeight) / 2;
+ pixmapDate->Fill(clrTransparent);
+ pixmapDate->DrawText(cPoint(x, y), curDate, Theme.Color(clrChannelHead), clrTransparent, fontManager->channelDate);
+ lastDate = curDate;
+ }
+}
+
+void cNopacityDisplayChannelView::DrawProgressBar(int Current, int Total) {
+ int barHeight = pixmapProgressBar->ViewPort().Height()-8;
+ if (barHeight%2 != 0)
+ barHeight++;
+ if (barHeight < 3)
+ return;
+ int barFullWidth = pixmapProgressBar->ViewPort().Width() - 20 - barHeight;
+ if (Current > Total)
+ Current = Total;
+ if ((Current > 0) || (Total > 0)) {
+ double percentSeen = ((double)Current) / (double)Total;
+ pixmapProgressBar->DrawEllipse(cRect(10,
+ 4,
+ barHeight,
+ barHeight),
+ Theme.Color(clrChannelProgressBarBlend));
+ if (Current > 0) {
+ tColor colAct = DrawProgressbarProgress(10 + barHeight/2, 4, barFullWidth * percentSeen, barHeight-1);
+ pixmapProgressBar->DrawEllipse(cRect(10 + barFullWidth * percentSeen,
+ 4,
+ barHeight,
+ barHeight),
+ colAct);
+ }
+ }
+}
+
+void cNopacityDisplayChannelView::DrawProgressbarBackground(void) {
+ int barHeight = pixmapProgressBar->ViewPort().Height()-8;
+ if (barHeight%2 != 0)
+ barHeight++;
+ if (barHeight < 3)
+ return;
+ int barFullWidth = pixmapProgressBar->ViewPort().Width() - 20 - barHeight;
+ pixmapProgressBar->DrawEllipse(cRect(9,
+ 3,
+ barHeight+2,
+ barHeight+2),
+ Theme.Color(clrChannelProgressBarBack));
+ pixmapProgressBar->DrawEllipse(cRect(9 + barFullWidth,
+ 3, barHeight+2,
+ barHeight+2),
+ Theme.Color(clrChannelProgressBarBack));
+ pixmapProgressBar->DrawRectangle(cRect(9 + barHeight/2,
+ 3,
+ barFullWidth,
+ barHeight+1),
+ Theme.Color(clrChannelProgressBarBack));
+}
+
+tColor cNopacityDisplayChannelView::DrawProgressbarProgress(int left, int top, int width, int height) {
+ tColor clr1 = Theme.Color(clrChannelProgressBar);
+ tColor clr2 = Theme.Color(clrChannelProgressBarBlend);
+ tColor clr = 0x00000000;
+ width = (width==0)?1:width;
+ int step = width / 256;
+ int alpha = 0x0;
+ int alphaStep;
+ int maximum = 0;
+ if (step == 0) { //width < 256
+ step = 1;
+ alphaStep = 256 / width;
+ maximum = width;
+ } else { //width > 256
+ alphaStep = 0x1;
+ maximum = 256;
+ }
+ int x = 0;
+ for (int i = 0; i < maximum; i++) {
+ x = left + i*step;
+ clr = AlphaBlend(clr1, clr2, alpha);
+ pixmapProgressBar->DrawRectangle(cRect(x,top,step,height), clr);
+ alpha += alphaStep;
+ }
+ if (step > 0) {
+ int rest = width - step*256;
+ pixmapProgressBar->DrawRectangle(cRect(left+step*256, top, rest, height), clr);
+ }
+ return clr;
+}
+
+void cNopacityDisplayChannelView::ClearProgressBar(void) {
+ pixmapProgressBar->Fill(clrTransparent);
+}
+
+
+void cNopacityDisplayChannelView::DrawEPGInfo(const cEvent *e, bool present, bool recording) {
+ int indent = 20;
+ cString startTime = e->GetTimeString();
+ cString strEPG = e->Title();
+ cString strEPGShort = e->ShortText();
+ cString strSeen("");
+ if (present) {
+ if (config.GetValue("progressCurrentSchedule") == 0) {
+ int seen = (int)(time(NULL) - e->StartTime())/60;
+ strSeen = cString::sprintf("%d/%dmin", seen, e->Duration()/60);
+ } else if (config.GetValue("progressCurrentSchedule") == 1) {
+ int remaining = (int)(e->EndTime() - time(NULL))/60;
+ strSeen = cString::sprintf("-%d/%dmin", remaining, e->Duration()/60);
+ }
+ } else {
+ strSeen = cString::sprintf("%dmin", e->Duration()/60);
+ }
+
+ int startTimeWidth = fontManager->channelEPG->Width(*startTime);
+ int epgWidth = fontManager->channelEPG->Width(*strEPG);
+ int epgWidthShort = fontManager->channelEPGSmall->Width(*strEPGShort);
+ int seenWidth = fontManager->channelEPG->Width(*strSeen);
+
+ int widthRecIcon = 0;
+ if (recording) {
+ widthRecIcon = fontManager->channelEPGSmall->Width(" REC ") + indent/2;
+ }
+ int spaceEPGText = geoManager->channelContentWidth - seenWidth
+ - startTimeWidth - 3 * indent - widthRecIcon
+ - fontManager->channelEPG->Width("...");
+ int spaceEPGTextSmall = spaceEPGText + widthRecIcon;
+ if (spaceEPGText < epgWidth) {
+ strEPG = CutText(*strEPG, spaceEPGText, fontManager->channelEPG).c_str();
+ }
+ if (spaceEPGTextSmall < epgWidthShort) {
+ strEPGShort = CutText(*strEPGShort, spaceEPGText, fontManager->channelEPGSmall).c_str();
+ }
+
+ int lineHeight = geoManager->channelEpgInfoLineHeight;
+ int yEPG = (present) ? 0 : 2 * lineHeight;
+ int yEPGSmall = (present) ? lineHeight : 3 * lineHeight;
+ int xEPG = 2 * indent + startTimeWidth;
+
+ tColor fontColor = (present) ? Theme.Color(clrChannelEPG)
+ : Theme.Color(clrChannelEPGNext);
+ tColor fontColorInfo = (present) ? Theme.Color(clrChannelEPGInfo)
+ : Theme.Color(clrChannelEPGInfoNext);
+
+ pixmapEPGInfo->DrawText(cPoint(indent, yEPG), *startTime, fontColor, clrTransparent, fontManager->channelEPG);
+
+ pixmapEPGInfo->DrawText(cPoint(xEPG + widthRecIcon, yEPG), *strEPG, fontColor, clrTransparent, fontManager->channelEPG);
+
+ pixmapEPGInfo->DrawText(cPoint(xEPG, yEPGSmall), *strEPGShort, fontColorInfo, clrTransparent, fontManager->channelEPGSmall);
+
+ int x = geoManager->channelContentWidth - 2 * indent - seenWidth;
+
+ pixmapEPGInfo->DrawText(cPoint(x, yEPG), *strSeen, fontColor, clrTransparent, fontManager->channelEPG);
+
+ //Recording Icon
+ if (recording) {
+ tColor clrRecIcon = (present)?Theme.Color(clrRecNow):Theme.Color(clrRecNext);
+ tColor clrRecIconText = (present)?Theme.Color(clrRecNowFont):Theme.Color(clrRecNextFont);
+ pixmapEPGInfo->DrawRectangle(cRect(xEPG, yEPG, widthRecIcon - indent/2, lineHeight), clrRecIcon);
+ int xRecText = xEPG + (widthRecIcon - indent/2 - fontManager->channelEPGSmall->Width("REC"))/2;
+ int yRecText = yEPG + (lineHeight - fontManager->channelEPGSmall->Height())/2;
+ pixmapEPGInfo->DrawText(cPoint(xRecText, yRecText), "REC", clrRecIconText, clrRecIcon, fontManager->channelEPGSmall);
+ }
+}
+
+void cNopacityDisplayChannelView::ClearEPGInfo(void) {
+ pixmapEPGInfo->Fill(clrTransparent);
+}
+
+void cNopacityDisplayChannelView::DrawStatusIcons(const cChannel *Channel) {
+ pixmapStatusIconsBackground->Fill(Theme.Color(clrStatusIconsBack));
+ DrawRoundedCorners(pixmapStatusIconsBackground,
+ 5,
+ 0,
+ 0,
+ pixmapStatusIconsBackground->ViewPort().Width(),
+ pixmapStatusIconsBackground->ViewPort().Height()
+ );
+
+ isRadioChannel = ((!Channel->Vpid())&&(Channel->Apid(0)))?true:false;
+ int iconX = 0;
+
+ if (Channel->Vpid() && Channel->Tpid()) {
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/txton", statusIconSize, statusIconSize);
+ if (imgIcon)
+ pixmapStatusIcons->DrawImage(cPoint(0,statusIconBorder), *imgIcon);
+ } else {
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/txtoff", statusIconSize, statusIconSize);
+ if (imgIcon)
+ pixmapStatusIcons->DrawImage(cPoint(0,statusIconBorder), *imgIcon);
+ }
+
+ iconX += statusIconBorder + statusIconSize;
+
+ if (Channel->Apid(0)) {
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/stereoon", statusIconSize, statusIconSize);
+ if (imgIcon)
+ pixmapStatusIcons->DrawImage(cPoint(iconX,statusIconBorder), *imgIcon);
+ } else {
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/stereooff", statusIconSize, statusIconSize);
+ if (imgIcon)
+ pixmapStatusIcons->DrawImage(cPoint(iconX,statusIconBorder), *imgIcon);
+ }
+
+ iconX += statusIconBorder + statusIconSize;
+
+ if (Channel->Dpid(0)) {
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/dolbyon", statusIconSize, statusIconSize);
+ if (imgIcon)
+ pixmapStatusIcons->DrawImage(cPoint(iconX,statusIconBorder), *imgIcon);
+ } else {
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/dolbyoff", statusIconSize, statusIconSize);
+ if (imgIcon)
+ pixmapStatusIcons->DrawImage(cPoint(iconX,statusIconBorder), *imgIcon);
+ }
+
+ iconX += statusIconBorder + statusIconSize;
+
+ if (Channel->Ca()) {
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/crypted", statusIconSize, statusIconSize);
+ if (imgIcon)
+ pixmapStatusIcons->DrawImage(cPoint(iconX,statusIconBorder), *imgIcon);
+ } else {
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/fta", statusIconSize, statusIconSize);
+ if (imgIcon)
+ pixmapStatusIcons->DrawImage(cPoint(iconX,statusIconBorder), *imgIcon);
+ }
+
+ iconX += statusIconBorder + statusIconSize;
+
+ if (cRecordControls::Active()) {
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/recon", statusIconSize, statusIconSize);
+ if (imgIcon)
+ pixmapStatusIcons->DrawImage(cPoint(iconX,statusIconBorder), *imgIcon);
+ } else {
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/recoff", statusIconSize, statusIconSize);
+ if (imgIcon)
+ pixmapStatusIcons->DrawImage(cPoint(iconX,statusIconBorder), *imgIcon);
+ }
+
+ iconX += statusIconBorder + statusIconSize;
+
+
+}
+
+void cNopacityDisplayChannelView::DrawScreenResolution(void) {
+ cString resolutionIcon("");
+ if (isRadioChannel) {
+ resolutionIcon = "skinIcons/radio";
+ } else {
+ resolutionIcon = GetScreenResolutionIcon();
+ }
+ int iconX = 5 * (statusIconBorder + statusIconSize);
+ cImage *imgRes = imgCache->GetSkinIcon(*resolutionIcon, 3*statusIconSize, statusIconSize);
+ if (imgRes)
+ pixmapStatusIcons->DrawImage(cPoint(iconX,statusIconBorder), *imgRes);
+
+}
+
+cString cNopacityDisplayChannelView::GetScreenResolutionIcon(void) {
+ int screenWidth = 0;
+ int screenHeight = 0;
+ double aspect = 0;
+ cDevice::PrimaryDevice()->GetVideoSize(screenWidth, screenHeight, aspect);
+ cString iconName("");
+ switch (screenWidth) {
+ case 1920:
+ case 1440:
+ iconName = "skinIcons/hd1080i";
+ break;
+ case 1280:
+ if (screenHeight == 720)
+ iconName = "skinIcons/hd720p";
+ else
+ iconName = "skinIcons/hd1080i";
+ break;
+ case 720:
+ iconName = "skinIcons/sd576i";
+ break;
+ default:
+ iconName = "skinIcons/sd576i";
+ break;
+ }
+ return iconName;
+}
+
+void cNopacityDisplayChannelView::ClearStatusIcons(void) {
+ pixmapStatusIcons->Fill(clrTransparent);
+ pixmapStatusIconsBackground->Fill(clrTransparent);
+}
+
+void cNopacityDisplayChannelView::DrawPoster(const cEvent *event, bool initial) {
+ if (pixmapPoster) {
+ osd->DestroyPixmap(pixmapPoster);
+ pixmapPoster = NULL;
+ }
+
+ static cPlugin *pScraper = GetScraperPlugin();
+ if (pScraper) {
+ ScraperGetPosterBanner call;
+ call.event = event;
+ if (pScraper->Service("GetPosterBanner", &call)) {
+ int mediaWidth = 0;
+ int mediaHeight = 0;
+ std::string mediaPath = "";
+ if ((call.type == tSeries) && call.banner.path.size() > 0) {
+ mediaWidth = call.banner.width;
+ mediaHeight = call.banner.height;
+ mediaPath = call.banner.path;
+ } else if (call.type == tMovie && call.poster.path.size() > 0 && call.poster.height > 0) {
+ double ratio = (double)(cOsd::OsdHeight()/3) / (double)call.poster.height;
+ mediaWidth = ratio * call.poster.width;
+ mediaHeight = ratio * call.poster.height;
+ mediaPath = call.poster.path;
+ } else
+ return;
+ int border = config.GetValue("channelPosterBorder");
+ pixmapPoster = osd->CreatePixmap(1, cRect(config.GetValue("channelBorderVertical"),
+ config.GetValue("channelBorderBottom"),
+ mediaWidth + 2 * border,
+ mediaHeight + 2 * border));
+ if (initial && config.GetValue("channelFadeTime"))
+ pixmapPoster->SetAlpha(0);
+ cImageLoader imgLoader;
+ if (imgLoader.LoadPoster(mediaPath.c_str(), mediaWidth, mediaHeight)) {
+ pixmapPoster->Fill(Theme.Color(clrChannelBackground));
+ pixmapPoster->DrawImage(cPoint(border, border), imgLoader.GetImage());
+ DrawRoundedCorners(pixmapPoster, border, 0, 0, pixmapPoster->ViewPort().Width(), pixmapPoster->ViewPort().Height());
+ } else {
+ pixmapPoster->Fill(clrTransparent);
+ }
+ }
+ return;
+ }
+}
+
+void cNopacityDisplayChannelView::DrawSignalMeter(void) {
+ signalWidth = geoManager->channelWidth * 0.15;
+ signalHeight = signalWidth *15 / 200;
+ cFont *fontInfoline = cFont::CreateFont(config.fontName, signalHeight - 2);
+ cString signalStrength = "STR";
+ cString signalQuality = "SNR";
+ cImage *imgSignal = imgCache->GetSkinIcon("skinIcons/signal", signalWidth, signalHeight, true);
+ if (imgSignal) {
+ signalWidth = imgSignal->Width();
+ signalHeight = imgSignal->Height();
+ int signalMeterY = geoManager->channelFooterY +
+ (geoManager->channelFooterHeight - 2*signalHeight - 5)/2;
+ int labelWidth = max(fontInfoline->Width(*signalStrength),
+ fontInfoline->Width(*signalQuality)) + 2;
+ signalX = geoManager->channelFooterHeight / 2 + labelWidth;
+ pixmapSignalStrength = osd->CreatePixmap(3,
+ cRect(geoManager->channelContentX + 10 + signalX,
+ signalMeterY + 2,
+ signalWidth + 2,
+ signalHeight + 2));
+ pixmapSignalQuality = osd->CreatePixmap(3,
+ cRect(geoManager->channelContentX + 10 + signalX,
+ signalMeterY + signalHeight + 5,
+ signalWidth + 2,
+ signalHeight + 2));
+ pixmapSignalMeter = osd->CreatePixmap(4,
+ cRect(geoManager->channelContentX + 10 + signalX + 1,
+ signalMeterY + 3, signalWidth,
+ 2*signalHeight + 3));
+ pixmapSignalLabel = osd->CreatePixmap(3,
+ cRect(geoManager->channelContentX + 10
+ + geoManager->channelFooterHeight / 2,
+ signalMeterY + 2,
+ labelWidth,
+ 2*signalHeight + 3));
+ pixmapSignalStrength->Fill(Theme.Color(clrProgressBarBack));
+ pixmapSignalQuality->Fill(Theme.Color(clrProgressBarBack));
+ pixmapSignalMeter->Fill(clrTransparent);
+ pixmapSignalLabel->Fill(clrTransparent);
+ if (config.GetValue("channelFadeTime")) {
+ pixmapSignalStrength->SetAlpha(0);
+ pixmapSignalQuality->SetAlpha(0);
+ pixmapSignalMeter->SetAlpha(0);
+ pixmapSignalLabel->SetAlpha(0);
+ }
+ pixmapSignalStrength->DrawImage(cPoint(1,1), *imgSignal);
+ pixmapSignalQuality->DrawImage(cPoint(1,1), *imgSignal);
+ pixmapSignalLabel->DrawText(cPoint(0, 2), *signalStrength, Theme.Color(clrChannelEPGInfo), clrTransparent, fontInfoline);
+ pixmapSignalLabel->DrawText(cPoint(0, signalHeight + 4), *signalQuality, Theme.Color(clrChannelEPGInfo), clrTransparent, fontInfoline);
+ }
+ delete fontInfoline;
+}
+
+void cNopacityDisplayChannelView::DrawSignal(void) {
+ time_t Now = time(NULL);
+ if (Now != lastSignalDisplay) {
+ int SignalStrength = cDevice::ActualDevice()->SignalStrength();
+ int SignalQuality = cDevice::ActualDevice()->SignalQuality();
+ if (SignalStrength < 0) SignalStrength = 0;
+ if (SignalQuality < 0) SignalQuality = 0;
+ if ((SignalStrength == 0)&&(SignalQuality==0))
+ return;
+ if ((lastSignalStrength != SignalStrength) || (lastSignalQuality != SignalQuality)) {
+ pixmapSignalMeter->Fill(clrTransparent);
+ pixmapSignalMeter->DrawRectangle(cRect(double(SignalStrength) /100 * signalWidth, 0, signalWidth - (double)SignalStrength /100 * signalWidth + 1, signalHeight), Theme.Color(clrChannelBackground));
+ pixmapSignalMeter->DrawRectangle(cRect(double(SignalQuality) /100 * signalWidth, signalHeight + 3, signalWidth - (double)SignalQuality / 100 * signalWidth + 1, signalHeight + 1), Theme.Color(clrChannelBackground));
+ }
+ lastSignalStrength = SignalStrength;
+ lastSignalQuality = SignalQuality;
+ lastSignalDisplay = Now;
+ }
+}
+
+
+void cNopacityDisplayChannelView::ShowSignalMeter(void) {
+ if(pixmapSignalStrength)
+ pixmapSignalStrength->SetLayer(3);
+ if(pixmapSignalQuality)
+ pixmapSignalQuality->SetLayer(3);
+ if(pixmapSignalMeter)
+ pixmapSignalMeter->SetLayer(4);
+ if(pixmapSignalLabel)
+ pixmapSignalLabel->SetLayer(3);
+}
+
+void cNopacityDisplayChannelView::HideSignalMeter(void) {
+ if(pixmapSignalStrength)
+ pixmapSignalStrength->SetLayer(-1);
+ if(pixmapSignalQuality)
+ pixmapSignalQuality->SetLayer(-1);
+ if(pixmapSignalMeter)
+ pixmapSignalMeter->SetLayer(-1);
+ if(pixmapSignalLabel)
+ pixmapSignalLabel->SetLayer(-1);
+}
+
+void cNopacityDisplayChannelView::DrawChannelGroups(const cChannel *Channel, cString ChannelName) {
+ int xSep, ySep;
+ int prevNextIconSize = 64;
+
+ cImageLoader imgLoader;
+ if (config.GetValue("logoPosition") != lpNone) {
+ cString separator = cString::sprintf("separatorlogos/%s", *ChannelName);
+ if (imgLoader.LoadLogo(*separator, geoManager->channelLogoWidth, geoManager->channelLogoHeight)) {
+ pixmapLogo->DrawImage(cPoint(0, 0), imgLoader.GetImage());
+ } else {
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/Channelseparator", geoManager->channelLogoWidth, geoManager->channelLogoHeight);
+ if (imgIcon)
+ pixmapLogo->DrawImage(cPoint(0, 0), *imgIcon);
+ }
+ }
+
+ ySep = (geoManager->channelContentHeight-fontManager->channelChannelGroup->Height())/2 - fontManager->channelChannelGroup->Height()/2;
+ int widthSep = fontManager->channelChannelGroup->Width(*ChannelName);
+
+ if (!config.GetValue("displayPrevNextChannelGroup")) {
+ xSep = (geoManager->channelContentWidth - widthSep)/2;
+ pixmapEPGInfo->DrawText(cPoint(xSep, ySep), *ChannelName, Theme.Color(clrChannelHead), clrTransparent, fontManager->channelChannelGroup);
+ return;
+ }
+
+ int spaceSep = 4 * geoManager->channelContentWidth / 10;
+ int spaceNextPrev = (geoManager->channelContentWidth - spaceSep - 2*prevNextIconSize - 10) / 2;
+
+ int xPrev = 0;
+ int xPrevIcon = spaceNextPrev;
+ xSep = xPrevIcon + prevNextIconSize;
+ int xNextIcon = xSep + spaceSep;
+ int xNext = xNextIcon + prevNextIconSize + 10;
+
+ std::string strSep = *ChannelName;
+ if (widthSep > spaceSep)
+ strSep = CutText(strSep, spaceSep, fontManager->channelChannelGroup);
+ widthSep = fontManager->channelChannelGroup->Width(strSep.c_str());
+ pixmapEPGInfo->DrawText(cPoint(xSep + (spaceSep - widthSep)/2, ySep), strSep.c_str(), Theme.Color(clrChannelHead), clrTransparent, fontManager->channelChannelGroup);
+
+ std::string prevChannelSep = GetChannelSep(Channel, true);
+ std::string nextChannelSep = GetChannelSep(Channel, false);
+ bool prevAvailable = (prevChannelSep.size() > 0)?true:false;
+ bool nextAvailable = (nextChannelSep.size() > 0)?true:false;
+
+ int ySepNextPrevIcon = (geoManager->channelContentHeight - prevNextIconSize)/2 - fontManager->channelChannelGroup->Height()/2;
+
+ int ySepNextPrev = ySep + (fontManager->channelChannelGroup->Height() - fontManager->channelChannelGroupSmall->Height())/2;
+ if (prevAvailable) {
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/arrowLeftChannelSep", prevNextIconSize, prevNextIconSize);
+ if (imgIcon)
+ pixmapEPGInfo->DrawImage(cPoint(xPrevIcon, ySepNextPrevIcon), *imgIcon);
+ if (fontManager->channelChannelGroupSmall->Width(prevChannelSep.c_str()) > spaceNextPrev)
+ prevChannelSep = CutText(prevChannelSep, spaceNextPrev, fontManager->channelChannelGroupSmall);
+ pixmapEPGInfo->DrawText(cPoint(xPrev, ySepNextPrev), prevChannelSep.c_str(), Theme.Color(clrChannelEPGInfoNext), clrTransparent, fontManager->channelChannelGroupSmall);
+ }
+ if (nextAvailable) {
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/arrowRightChannelSep", prevNextIconSize, prevNextIconSize);
+ if (imgIcon)
+ pixmapEPGInfo->DrawImage(cPoint(xNextIcon, ySepNextPrevIcon), *imgIcon);
+ if (fontManager->channelChannelGroupSmall->Width(nextChannelSep.c_str()) > (spaceNextPrev-10))
+ nextChannelSep = CutText(nextChannelSep, spaceNextPrev-10, fontManager->channelChannelGroupSmall);
+ pixmapEPGInfo->DrawText(cPoint(xNext, ySepNextPrev), nextChannelSep.c_str(), Theme.Color(clrChannelEPGInfoNext), clrTransparent, fontManager->channelChannelGroupSmall);
+ }
+}
+
+std::string cNopacityDisplayChannelView::GetChannelSep(const cChannel *channel, bool prev) {
+ std::string sepName = "";
+ const cChannel *sep = prev ? Channels.Prev(channel) :
+ Channels.Next(channel);
+ for (; sep; (prev)?(sep = Channels.Prev(sep)):(sep = Channels.Next(sep))) {
+ if (sep->GroupSep()) {
+ sepName = sep->Name();
+ break;
+ }
+ }
+ return sepName;
+}
+
+void cNopacityDisplayChannelView::DrawSourceInfo(void) {
+ const cChannel *channel = cDevice::ActualDevice()->GetCurrentlyTunedTransponder();
+ const cSource *source = (channel) ? Sources.Get(channel->Source()) : NULL;
+ cString channelInfo = "";
+ if (source) {
+ channelInfo = cString::sprintf("%s #%d", source->Description(), cDevice::ActualDevice()->DeviceNumber());
+ }
+ if (cRecordControls::Active()) {
+ cSortedTimers SortedTimers;
+ bool first = true;
+ int truncPos = 0;
+ for (int i = 0; i < SortedTimers.Size(); i++)
+ if (const cTimer *Timer = SortedTimers[i])
+ if (Timer->Recording()) {
+ if (cRecordControl *RecordControl = cRecordControls::GetRecordControl(Timer))
+ if (const cDevice *Device = RecordControl->Device()) {
+ cString name(Timer->File());
+ if (first) {
+ truncPos = strlen(*channelInfo) + 30;
+ } else {
+ name.Truncate(15);
+ if (truncPos) {
+ channelInfo.Truncate(truncPos);
+ truncPos = 0;
+ ClearSourceInfo();
+ }
+ }
+ channelInfo = cString::sprintf("%s%s #%i: %s", *channelInfo, (first)?" - Rec:":",", Device->DeviceNumber(), *name);
+ first = false;
+ }
+ } else if ((Timer->Flags() & tfActive) && !Timer->Pending())
+ break;
+ }
+ int textY = (geoManager->channelFooterHeight - fontManager->channelSourceInfo->Height()) / 2;
+ if (fontManager->channelSourceInfo->Width(*channelInfo) > pixmapSourceInfo->ViewPort().Width())
+ channelInfo = CutText(*channelInfo, pixmapSourceInfo->ViewPort().Width(), fontManager->channelSourceInfo).c_str();
+ pixmapSourceInfo->DrawText(cPoint(0, textY), channelInfo, Theme.Color(clrChannelHead), clrTransparent, fontManager->channelSourceInfo);
+}
+
+void cNopacityDisplayChannelView::ClearSourceInfo(void) {
+ pixmapSourceInfo->Fill(clrTransparent);
+}
+
+void cNopacityDisplayChannelView::DisplayMessage(const char *Text) {
+ if (!Text)
+ return;
+ int textWidth = fontManager->channelEPG->Width(Text);
+ int x = (geoManager->channelContentWidth - textWidth)/2;
+ int y = (geoManager->channelEpgInfoHeight - fontManager->channelEPG->Height())/2;
+ pixmapEPGInfo->DrawText(cPoint(x, y), Text, Theme.Color(clrChannelEPG), clrTransparent, fontManager->channelEPG);
+}
diff --git a/displaychannelview.h b/displaychannelview.h
new file mode 100644
index 0000000..7a3fd91
--- /dev/null
+++ b/displaychannelview.h
@@ -0,0 +1,69 @@
+#ifndef __NOPACITY_DISPLAYCHANNELVIEW_H
+#define __NOPACITY_DISPLAYCHANNELVIEW_H
+
+#include "imagecache.h"
+#include <vdr/osd.h>
+
+class cNopacityDisplayChannelView {
+private:
+ cImageCache *imgCache;
+ cOsd *osd;
+ cString lastDate;
+ int statusIconBorder;
+ int statusIconSize;
+ bool isRadioChannel;
+ int signalWidth, signalHeight, signalX;
+ int lastSignalDisplay;
+ int lastSignalStrength;
+ int lastSignalQuality;
+ cPixmap *pixmapBackground;
+ cPixmap *pixmapTop;
+ cPixmap *pixmapLogo;
+ cPixmap *pixmapLogoBackground;
+ cPixmap *pixmapChannelName;
+ cPixmap *pixmapDate;
+ cPixmap *pixmapProgressBar;
+ cPixmap *pixmapEPGInfo;
+ cPixmap *pixmapStatusIcons;
+ cPixmap *pixmapStatusIconsBackground;
+ cPixmap *pixmapSignalStrength;
+ cPixmap *pixmapSignalQuality;
+ cPixmap *pixmapSignalMeter;
+ cPixmap *pixmapSignalLabel;
+ cPixmap *pixmapSourceInfo;
+ cPixmap *pixmapPoster;
+ tColor DrawProgressbarProgress(int left, int top, int width, int height);
+ cString GetScreenResolutionIcon(void);
+ std::string GetChannelSep(const cChannel *channel, bool prev);
+public:
+ cNopacityDisplayChannelView(cImageCache *imgCache);
+ virtual ~cNopacityDisplayChannelView();
+ bool createOsd(void);
+ void CreatePixmaps(void);
+ void SetAlpha(int alpha);
+ void DrawBackground(void);
+ void DrawChannelLogo(const cChannel *Channel);
+ void ClearChannelLogo(void);
+ void DrawChannelName(cString number, cString name);
+ void ClearChannelName(void);
+ void DrawDate(void);
+ void DrawProgressbarBackground(void);
+ void DrawProgressBar(int Current, int Total);
+ void ClearProgressBar(void);
+ void DrawEPGInfo(const cEvent *e, bool present, bool recording);
+ void ClearEPGInfo(void);
+ void DrawStatusIcons(const cChannel *Channel);
+ void DrawScreenResolution(void);
+ void ClearStatusIcons(void);
+ void DrawPoster(const cEvent *event, bool initial);
+ void DrawSignalMeter(void);
+ void DrawSignal(void);
+ void ShowSignalMeter(void);
+ void HideSignalMeter(void);
+ void DrawChannelGroups(const cChannel *Channel, cString ChannelName);
+ void DrawSourceInfo(void);
+ void ClearSourceInfo(void);
+ void DisplayMessage(const char *Text);
+ void Flush(void) { osd->Flush(); };
+};
+#endif //__NOPACITY_DISPLAYCHANNELVIEW_H
diff --git a/displaymenu.c b/displaymenu.c
index 0bedb00..31737e5 100644
--- a/displaymenu.c
+++ b/displaymenu.c
@@ -5,14 +5,17 @@ namespace PluginRemoteTimers {
}
}
+#include "displaymenuview.h"
#include "displaymenu.h"
+#include "config.h"
#include <string>
+#include "services/epgsearch.h"
-cNopacityDisplayMenu::cNopacityDisplayMenu(void) {
- config.setDynamicValues();
+cNopacityDisplayMenu::cNopacityDisplayMenu(cImageCache *imgCache) {
+ this->imgCache = imgCache;
menuCategoryLast = mcUndefined;
- FrameTime = config.menuFrameTime;
- FadeTime = config.menuFadeTime;
+ FadeTime = config.GetValue("menuFadeTime");
+ FrameTime = FadeTime / 10;
initial = true;
initMenu = true;
diskUsageDrawn = false;
@@ -23,15 +26,14 @@ cNopacityDisplayMenu::cNopacityDisplayMenu(void) {
currentNumItems = 0;
detailView = NULL;
SetButtonPositions();
- menuView = new cNopacityDisplayMenuView();
+ menuView = new cNopacityDisplayMenuView(imgCache);
osd = menuView->createOsd();
- menuView->SetGeometry();
+ menuView->SetDescriptionTextWindowSize();
menuView->CreatePixmaps();
- menuView->CreateFonts();
menuView->SetAvrgFontWidth();
- menuView->CreateBackgroundImages(handleBackgrounds, handleButtons);
menuView->DrawHeaderLogo();
menuView->DrawBorderDecoration();
+ currentFeed = 0;
}
cNopacityDisplayMenu::~cNopacityDisplayMenu() {
@@ -44,17 +46,12 @@ cNopacityDisplayMenu::~cNopacityDisplayMenu() {
delete detailView;
}
timers.Clear();
- for (int i=0; i<14; i++)
- cOsdProvider::DropImage(handleBackgrounds[i]);
- for (int i=0; i<4; i++)
- cOsdProvider::DropImage(handleButtons[i]);
-
delete osd;
cDevice::PrimaryDevice()->ScaleVideo(cRect::Null);
}
void cNopacityDisplayMenu::DrawDisk(void) {
- if (!config.narrowMainMenu)
+ if (!config.GetValue("narrowMainMenu"))
return;
if (initial || ((menuCategoryLast!=mcMain)&&(MenuCategory()==mcMain)&&!diskUsageDrawn)) {
if (cVideoDiskUsage::HasChanged(lastDiskUsageState)) {
@@ -90,7 +87,7 @@ int cNopacityDisplayMenu::CheckTimerConflict(bool timersChanged) {
}
void cNopacityDisplayMenu::DrawTimers(bool timersChanged, int numConflicts) {
- if (!config.narrowMainMenu)
+ if (!config.GetValue("narrowMainMenu"))
return;
int maxTimersHeight = menuView->GetTimersMaxHeight();
if (initial || ((menuCategoryLast!=mcMain)&&(MenuCategory()==mcMain)&&!timersDrawn)) {
@@ -103,7 +100,7 @@ void cNopacityDisplayMenu::DrawTimers(bool timersChanged, int numConflicts) {
drawRemoteTimers = pRemoteTimers->Service("RemoteTimers::RefreshTimers-v1.0", &errorMsg);
}
timers.Clear();
- cSortedTimers SortedTimers;
+ cSortedTimers SortedTimers;
//if remotetimers plugin is available, take timers also from him
if (drawRemoteTimers) {
cTimer* remoteTimer = NULL;
@@ -121,7 +118,7 @@ void cNopacityDisplayMenu::DrawTimers(bool timersChanged, int numConflicts) {
if (initial)
if (FadeTime)
t->SetAlpha(0);
- currentHeight += t->GetHeight() + menuView->spaceMenu;
+ currentHeight += t->GetHeight() + geoManager->menuSpace;
timers.Add(t);
}
int numTimersDisplayed = 0;
@@ -132,11 +129,11 @@ void cNopacityDisplayMenu::DrawTimers(bool timersChanged, int numConflicts) {
if (initial)
if (FadeTime)
t->SetAlpha(0);
- currentHeight += t->GetHeight() + menuView->spaceMenu;
+ currentHeight += t->GetHeight() + geoManager->menuSpace;
if (currentHeight < maxTimersHeight) {
timers.Add(t);
numTimersDisplayed++;
- if (numTimersDisplayed == config.numberTimers)
+ if (numTimersDisplayed == config.GetValue("numberTimers"))
break;
} else {
delete t;
@@ -148,65 +145,61 @@ void cNopacityDisplayMenu::DrawTimers(bool timersChanged, int numConflicts) {
} else {
for (cNopacityTimer *t = timers.First(); t; t = timers.Next(t)) {
t->Show();
- }
+ }
}
timersDrawn = true;
}
}
void cNopacityDisplayMenu::Scroll(bool Up, bool Page) {
- bool scrolled;
- scrolled = detailView->Scroll(Up, Page);
- if (scrolled) {
- double height = detailView->ScrollbarSize();
- double offset = detailView->Offset();
- menuView->DrawScrollbar(height, offset);
- }
+ if (!detailView)
+ return;
+ detailView->KeyInput(Up, Page);
}
int cNopacityDisplayMenu::MaxItems(void) {
int maxItems = 0;
switch (MenuCategory()) {
case mcMain:
- if (config.narrowMainMenu)
- maxItems = menuView->GetMaxItems(MenuCategory());
+ if (config.GetValue("narrowMainMenu"))
+ maxItems = config.GetValue("numMainMenuItems");
else
- maxItems = config.numDefaultMenuItems;
+ maxItems = config.GetValue("numDefaultMenuItems");
break;
case mcSetup:
- if (config.narrowSetupMenu)
- maxItems = menuView->GetMaxItems(MenuCategory());
+ if (config.GetValue("narrowSetupMenu"))
+ maxItems = config.GetValue("numMainMenuItems");
else
- maxItems = config.numDefaultMenuItems;
+ maxItems = config.GetValue("numDefaultMenuItems");
break;
case mcSchedule:
case mcScheduleNow:
case mcScheduleNext:
- if (config.narrowScheduleMenu)
- maxItems = menuView->GetMaxItems(MenuCategory());
+ if (config.GetValue("narrowScheduleMenu"))
+ maxItems = config.GetValue("numSchedulesMenuItems");
else
- maxItems = config.numDefaultMenuItems;
+ maxItems = config.GetValue("numDefaultMenuItems");
break;
case mcChannel:
- if (config.narrowChannelMenu)
- maxItems = menuView->GetMaxItems(MenuCategory());
+ if (config.GetValue("narrowChannelMenu"))
+ maxItems = config.GetValue("numSchedulesMenuItems");
else
- maxItems = config.numDefaultMenuItems;
+ maxItems = config.GetValue("numDefaultMenuItems");
break;
case mcTimer:
- if (config.narrowTimerMenu)
- maxItems = menuView->GetMaxItems(MenuCategory());
+ if (config.GetValue("narrowTimerMenu"))
+ maxItems = config.GetValue("numSchedulesMenuItems");
else
- maxItems = config.numDefaultMenuItems;
+ maxItems = config.GetValue("numDefaultMenuItems");
break;
case mcRecording:
- if (config.narrowRecordingMenu)
- maxItems = menuView->GetMaxItems(MenuCategory());
+ if (config.GetValue("narrowRecordingMenu"))
+ maxItems = config.GetValue("numRecordingsMenuItems");
else
- maxItems = config.numDefaultMenuItems;
+ maxItems = config.GetValue("numDefaultMenuItems");
break;
default:
- maxItems = config.numDefaultMenuItems;
+ maxItems = config.GetValue("numDefaultMenuItems");
}
currentNumItems = maxItems;
return maxItems;
@@ -257,14 +250,14 @@ void cNopacityDisplayMenu::SetMenuCategory(eMenuCategory MenuCategory) {
menuCategoryLast = this->MenuCategory();
cSkinDisplayMenu::SetMenuCategory(MenuCategory);
if ((menuCategoryLast == mcMain) && (MenuCategory != mcMain)) {
- if (config.showDiscUsage) {
+ if (config.GetValue("showDiscUsage")) {
menuView->ShowDiskUsage(false);
diskUsageDrawn = false;
}
- if (config.showTimers) {
+ if (config.GetValue("showTimers")) {
for (cNopacityTimer *t = timers.First(); t; t = timers.Next(t)) {
t->Hide();
- }
+ }
timersDrawn = false;
}
}
@@ -283,7 +276,7 @@ void cNopacityDisplayMenu::SetTitle(const char *Title) {
cString title = Title;
switch (MenuCategory()) {
case mcMain:
- switch (config.mainMenuTitleStyle) {
+ switch (config.GetValue("mainMenuTitleStyle")) {
case 0:
title = cString::sprintf("%s %s", Title, VDRVERSION);
break;
@@ -342,27 +335,26 @@ void cNopacityDisplayMenu::SetButtonPositions(void) {
continue;
}
}
-
}
void cNopacityDisplayMenu::SetButtons(const char *Red, const char *Green, const char *Yellow, const char *Blue) {
if (Red) {
- menuView->DrawButton(Red, handleButtons[0], Theme.Color(clrButtonRedBorder), positionButtons[0]);
+ menuView->DrawButton(Red, seButtonRed, Theme.Color(clrButtonRed), Theme.Color(clrButtonRedBorder), Theme.Color(clrButtonRedFont), positionButtons[0]);
} else
menuView->ClearButton(positionButtons[0]);
if (Green) {
- menuView->DrawButton(Green, handleButtons[1], Theme.Color(clrButtonGreenBorder), positionButtons[1]);
+ menuView->DrawButton(Green, seButtonGreen,Theme.Color(clrButtonGreen), Theme.Color(clrButtonGreenBorder), Theme.Color(clrButtonGreenFont), positionButtons[1]);
} else
menuView->ClearButton(positionButtons[1]);
if (Yellow) {
- menuView->DrawButton(Yellow, handleButtons[2], Theme.Color(clrButtonYellowBorder), positionButtons[2]);
+ menuView->DrawButton(Yellow, seButtonYellow, Theme.Color(clrButtonYellow), Theme.Color(clrButtonYellowBorder), Theme.Color(clrButtonYellowFont), positionButtons[2]);
} else
menuView->ClearButton(positionButtons[2]);
if (Blue) {
- menuView->DrawButton(Blue, handleButtons[3], Theme.Color(clrButtonBlueBorder), positionButtons[3]);
+ menuView->DrawButton(Blue, seButtonBlue, Theme.Color(clrButtonBlue), Theme.Color(clrButtonBlueBorder), Theme.Color(clrButtonBlueFont), positionButtons[3]);
} else
menuView->ClearButton(positionButtons[3]);
}
@@ -375,26 +367,30 @@ void cNopacityDisplayMenu::SetMessage(eMessageType Type, const char *Text) {
}
}
-bool cNopacityDisplayMenu::SetItemEvent(const cEvent *Event, int Index, bool Current,
- bool Selectable, const cChannel *Channel, bool WithDate, eTimerMatch TimerMatch) {
- if (!config.narrowScheduleMenu)
+bool cNopacityDisplayMenu::SetItemEvent(const cEvent *Event, int Index, bool Current,
+ bool Selectable, const cChannel *Channel, bool WithDate, eTimerMatch TimerMatch) {
+
+ if (!config.GetValue("narrowScheduleMenu"))
return false;
if ((initMenu)&&(Index > menuItemIndexLast)) {
- cNopacityMenuItem *item = new cNopacityScheduleMenuItem(osd, Event, Channel, TimerMatch, Selectable, MenuCategory());
+ cNopacityMenuItem *item = new cNopacityScheduleMenuItem(osd, imgCache, Event, Channel, TimerMatch, Selectable, MenuCategory(), &videoWindowRect);
cPoint itemSize;
menuView->GetMenuItemSize(MenuCategory(), &itemSize);
- item->SetFont(menuView->GetMenuItemFont(mcSchedule));
- item->SetFontSmall(menuView->GetMenuItemFontSmall(mcSchedule));
- item->SetFontEPGWindow(menuView->GetEPGWindowFont());
+ item->SetFont(fontManager->menuItemSchedule);
+ item->SetFontSmall(fontManager->menuItemScheduleSmall);
+ item->SetFontEPGWindow(fontManager->menuEPGInfoWindow);
+ item->SetFontEPGWindowLarge(fontManager->menuEPGInfoWindowLarge);
int spaceTop = menuView->GetMenuTop(currentNumItems, itemSize.Y());
- item->SetGeometry(Index, spaceTop, menuView->GetMenuItemLeft(itemSize.X()), itemSize.X(), itemSize.Y(), menuView->spaceMenu);
+ item->SetGeometry(Index, spaceTop, menuView->GetMenuItemLeft(itemSize.X()), itemSize.X(), itemSize.Y(), geoManager->menuSpace);
item->SetTextWindow(menuView->GetDescriptionTextWindowSize(mcSchedule));
item->SetCurrent(Current);
- item->SetBackgrounds(handleBackgrounds);
item->CreateText();
int textWidth = item->CheckScrollable((Channel)?true:false);
- item->CreatePixmap();
- item->CreatePixmapIcon();
+ item->CreatePixmapBackground();
+ if (config.GetValue("displayType") == dtGraphical) {
+ item->CreatePixmapForeground();
+ }
+ item->CreatePixmapStatic();
item->CreatePixmapTextScroller(textWidth);
menuItems.Add(item);
item->Render();
@@ -414,23 +410,28 @@ bool cNopacityDisplayMenu::SetItemEvent(const cEvent *Event, int Index, bool Cur
return true;
}
-bool cNopacityDisplayMenu::SetItemTimer(const cTimer *Timer, int Index, bool Current, bool Selectable) {
- if (!config.narrowTimerMenu)
+bool cNopacityDisplayMenu::SetItemTimer(const cTimer *Timer, int Index, bool Current, bool Selectable) {
+ if (!config.GetValue("narrowTimerMenu"))
return false;
if ((initMenu)&&(Index > menuItemIndexLast)) {
- cNopacityMenuItem *item = new cNopacityTimerMenuItem(osd, Timer, Selectable);
+ cNopacityMenuItem *item = new cNopacityTimerMenuItem(osd, imgCache, Timer, Selectable, &videoWindowRect);
cPoint itemSize;
menuView->GetMenuItemSize(MenuCategory(), &itemSize);
- item->SetFont(menuView->GetMenuItemFont(mcTimer));
- item->SetFontSmall(menuView->GetMenuItemFontSmall(mcTimer));
+ item->SetFont(fontManager->menuItemTimers);
+ item->SetFontSmall(fontManager->menuItemTimersSmall);
+ item->SetFontEPGWindow(fontManager->menuEPGInfoWindow);
+ item->SetFontEPGWindowLarge(fontManager->menuEPGInfoWindowLarge);
int spaceTop = menuView->GetMenuTop(currentNumItems, itemSize.Y());
- item->SetGeometry(Index, spaceTop, menuView->GetMenuItemLeft(itemSize.X()), itemSize.X(), itemSize.Y(), menuView->spaceMenu);
+ item->SetGeometry(Index, spaceTop, menuView->GetMenuItemLeft(itemSize.X()), itemSize.X(), itemSize.Y(), geoManager->menuSpace);
+ item->SetTextWindow(menuView->GetDescriptionTextWindowSize(mcTimer));
item->SetCurrent(Current);
- item->SetBackgrounds(handleBackgrounds);
item->CreateText();
int textWidth = item->CheckScrollable(true);
- item->CreatePixmap();
- item->CreatePixmapIcon();
+ item->CreatePixmapBackground();
+ if (config.GetValue("displayType") == dtGraphical) {
+ item->CreatePixmapForeground();
+ }
+ item->CreatePixmapStatic();
item->CreatePixmapTextScroller(textWidth);
menuItems.Add(item);
item->Render();
@@ -450,24 +451,28 @@ bool cNopacityDisplayMenu::SetItemTimer(const cTimer *Timer, int Index, bool Cur
return true;
}
-bool cNopacityDisplayMenu::SetItemChannel(const cChannel *Channel, int Index, bool Current, bool Selectable, bool WithProvider) {
- if (!config.narrowChannelMenu)
+bool cNopacityDisplayMenu::SetItemChannel(const cChannel *Channel, int Index, bool Current, bool Selectable, bool WithProvider) {
+ if (!config.GetValue("narrowChannelMenu"))
return false;
if ((initMenu)&&(Index > menuItemIndexLast)) {
- cNopacityMenuItem *item = new cNopacityChannelMenuItem(osd, Channel, Selectable);
+ cNopacityMenuItem *item = new cNopacityChannelMenuItem(osd, imgCache, Channel, Selectable, &videoWindowRect);
cPoint itemSize;
menuView->GetMenuItemSize(MenuCategory(), &itemSize);
- item->SetFont(menuView->GetMenuItemFont(mcChannel));
- item->SetFontSmall(menuView->GetMenuItemFontSmall(mcChannel));
+ item->SetFont(fontManager->menuItemChannel);
+ item->SetFontSmall(fontManager->menuItemChannelSmall);
+ item->SetFontEPGWindow(fontManager->menuEPGInfoWindow);
int spaceTop = menuView->GetMenuTop(currentNumItems, itemSize.Y());
- item->SetGeometry(Index, spaceTop, menuView->GetMenuItemLeft(itemSize.X()), itemSize.X(), itemSize.Y(), menuView->spaceMenu);
+ item->SetGeometry(Index, spaceTop, menuView->GetMenuItemLeft(itemSize.X()), itemSize.X(), itemSize.Y(), geoManager->menuSpace);
+ item->SetTextWindow(menuView->GetDescriptionTextWindowSize(mcChannel));
item->SetCurrent(Current);
- item->SetBackgrounds(handleBackgrounds);
item->CreateText();
int textWidth = item->CheckScrollable(true);
- item->CreatePixmap();
- item->CreatePixmapIcon();
+ item->CreatePixmapBackground();
+ item->CreatePixmapStatic();
item->CreatePixmapTextScroller(textWidth);
+ if (config.GetValue("displayType") == dtGraphical) {
+ item->CreatePixmapForeground();
+ }
menuItems.Add(item);
item->Render();
menuItemIndexLast = Index;
@@ -486,30 +491,34 @@ bool cNopacityDisplayMenu::SetItemChannel(const cChannel *Channel, int Index, bo
return true;
}
-bool cNopacityDisplayMenu::SetItemRecording(const cRecording *Recording, int Index, bool Current, bool Selectable,
+bool cNopacityDisplayMenu::SetItemRecording(const cRecording *Recording, int Index, bool Current, bool Selectable,
int Level, int Total, int New) {
- if (!config.narrowRecordingMenu)
+ if (!config.GetValue("narrowRecordingMenu"))
return false;
if ((initMenu)&&(Index > menuItemIndexLast)) {
bool isFolder = false;
if (Total > 0)
isFolder = true;
- cNopacityMenuItem *item = new cNopacityRecordingMenuItem(osd, Recording, Selectable, isFolder, Level, Total, New);
+ cNopacityMenuItem *item = new cNopacityRecordingMenuItem(osd, imgCache, Recording, Selectable, isFolder, Level, Total, New, &videoWindowRect);
cPoint itemSize;
menuView->GetMenuItemSize(MenuCategory(), &itemSize);
- item->SetFont(menuView->GetMenuItemFont(mcRecording));
- item->SetFontSmall(menuView->GetMenuItemFontSmall(mcRecording));
- item->SetFontEPGWindow(menuView->GetEPGWindowFont());
+ item->SetFont(fontManager->menuItemRecordings);
+ item->SetFontSmall(fontManager->menuItemRecordingsSmall);
+ item->SetFontEPGWindow(fontManager->menuEPGInfoWindow);
+ item->SetFontEPGWindowLarge(fontManager->menuEPGInfoWindowLarge);
int spaceTop = menuView->GetMenuTop(currentNumItems, itemSize.Y());
- item->SetGeometry(Index, spaceTop, menuView->GetMenuItemLeft(itemSize.X()), itemSize.X(), itemSize.Y(), menuView->spaceMenu);
+ item->SetGeometry(Index, spaceTop, menuView->GetMenuItemLeft(itemSize.X()), itemSize.X(), itemSize.Y(), geoManager->menuSpace);
item->SetTextWindow(menuView->GetDescriptionTextWindowSize(mcRecording));
item->SetCurrent(Current);
- item->SetBackgrounds(handleBackgrounds);
item->CreateText();
+ item->SetPoster();
int textWidth = item->CheckScrollable(false);
- item->CreatePixmap();
- item->CreatePixmapIcon();
+ item->CreatePixmapBackground();
+ item->CreatePixmapStatic();
item->CreatePixmapTextScroller(textWidth);
+ if (config.GetValue("displayType") == dtGraphical) {
+ item->CreatePixmapForeground();
+ }
menuItems.Add(item);
item->Render();
menuItemIndexLast = Index;
@@ -531,6 +540,7 @@ bool cNopacityDisplayMenu::SetItemRecording(const cRecording *Recording, int Ind
void cNopacityDisplayMenu::SetItem(const char *Text, int Index, bool Current, bool Selectable) {
bool hasIcons = false;
+ bool MainOrSetup = false;
cString *strItems = new cString[MaxTabs];
int *tabItems = new int[2*MaxTabs];
for (int i=0; i<MaxTabs; i++) {
@@ -543,29 +553,30 @@ void cNopacityDisplayMenu::SetItem(const char *Text, int Index, bool Current, bo
if (Index > menuItemIndexLast) {
cNopacityMenuItem *item;
cPoint itemSize;
- if (((MenuCategory() == mcMain)&&(config.narrowMainMenu)) || ((MenuCategory() == mcSetup)&&(config.narrowSetupMenu))){
+ if (((MenuCategory() == mcMain)&&(config.GetValue("narrowMainMenu"))) || ((MenuCategory() == mcSetup)&&(config.GetValue("narrowSetupMenu")))){
+ MainOrSetup = true;
bool isSetup = (MenuCategory() == mcSetup)?true:false;
- item = new cNopacityMainMenuItem(osd, Text, Selectable, isSetup);
+ item = new cNopacityMainMenuItem(osd, imgCache, Text, Selectable, isSetup);
menuView->GetMenuItemSize(MenuCategory(), &itemSize);
- item->SetFont(menuView->GetMenuItemFont(mcMain));
- if (config.useMenuIcons)
+ item->SetFont(fontManager->menuItemLarge);
+ if (config.GetValue("useMenuIcons"))
hasIcons = true;
} else {
- item = new cNopacityDefaultMenuItem(osd, Text, Selectable);
+ item = new cNopacityDefaultMenuItem(osd, imgCache, Text, Selectable);
menuView->GetMenuItemSize(mcUnknown, &itemSize);
- item->SetFont(menuView->GetMenuItemFont(mcUnknown));
+ item->SetFont(fontManager->menuItemDefault);
}
int spaceTop = menuView->GetMenuTop(currentNumItems, itemSize.Y());
- item->SetGeometry(Index, spaceTop, menuView->GetMenuItemLeft(itemSize.X()), itemSize.X(), itemSize.Y(), menuView->spaceMenu);
+ item->SetGeometry(Index, spaceTop, menuView->GetMenuItemLeft(itemSize.X()), itemSize.X(), itemSize.Y(), geoManager->menuSpace);
item->SetCurrent(Current);
- item->SetBackgrounds(handleBackgrounds);
item->SetTabs(strItems, tabItems, MaxTabs);
item->CreateText();
int textWidth = item->CheckScrollable(hasIcons);
- item->CreatePixmap();
- if (hasIcons) {
- item->CreatePixmapIcon();
+ item->CreatePixmapBackground();
+ if (config.GetValue("displayType") == dtGraphical && MainOrSetup) {
+ item->CreatePixmapForeground();
}
+ item->CreatePixmapStatic();
if (textWidth > 0)
item->CreatePixmapTextScroller(textWidth);
menuItems.Add(item);
@@ -590,6 +601,8 @@ void cNopacityDisplayMenu::SetItem(const char *Text, int Index, bool Current, bo
if (item) {
item->SetTabs(strItems, tabItems, MaxTabs);
item->SetCurrent(Current);
+ if ((MenuCategory() != mcMain) && (MenuCategory() != mcSetup))
+ item->CheckScrollable(false);
item->Render();
}
}
@@ -625,8 +638,8 @@ void cNopacityDisplayMenu::SplitItem(const char *Text, cString *strItems, int *t
}
}
-int cNopacityDisplayMenu::Tab(int n) {
- return (n >= 0 && n < MaxTabs) ? menuView->mytabs[n] : 0;
+int cNopacityDisplayMenu::Tab(int n) {
+ return (n >= 0 && n < MaxTabs) ? menuView->mytabs[n] : 0;
}
void cNopacityDisplayMenu::SetTabs(int Tab1, int Tab2, int Tab3, int Tab4, int Tab5) {
@@ -648,7 +661,7 @@ void cNopacityDisplayMenu::SetScrollbar(int Total, int Offset) {
}
double height = (double)MaxItems()/(double)Total;
double offset = (double)Offset/(double)Total;
-
+
menuView->DrawScrollbar(height, offset);
}
@@ -656,18 +669,10 @@ void cNopacityDisplayMenu::SetEvent(const cEvent *Event) {
if (!Event)
return;
menuView->AdjustContentBackground(this->MenuCategory(), menuCategoryLast, videoWindowRect);
- detailView = new cNopacityMenuDetailEventView(osd, Event);
+ detailView = new cNopacityDetailView(dvEvent, osd, imgCache);
menuView->SetDetailViewSize(dvEvent, detailView);
- detailView->SetFonts();
- detailView->SetContent();
- detailView->SetContentHeight();
- detailView->CreatePixmaps();
- detailView->Render();
- if (detailView->Scrollable()) {
- double height = detailView->ScrollbarSize();
- double offset = 0.0;
- menuView->DrawScrollbar(height, offset);
- }
+ detailView->SetEvent(Event);
+ detailView->Start();
}
void cNopacityDisplayMenu::SetRecording(const cRecording *Recording) {
@@ -678,52 +683,37 @@ void cNopacityDisplayMenu::SetRecording(const cRecording *Recording) {
return;
}
menuView->AdjustContentBackground(this->MenuCategory(), menuCategoryLast, videoWindowRect);
- detailView = new cNopacityMenuDetailRecordingView(osd, Recording);
+ detailView = new cNopacityDetailView(dvRecording, osd, imgCache);
menuView->SetDetailViewSize(dvRecording, detailView);
- detailView->SetFonts();
- detailView->SetContent();
- detailView->SetContentHeight();
- detailView->CreatePixmaps();
- detailView->Render();
- if (detailView->Scrollable()) {
- double height = detailView->ScrollbarSize();
- double offset = 0.0;
- menuView->DrawScrollbar(height, offset);
- }
+ detailView->SetRecording(Recording);
+ detailView->Start();
}
void cNopacityDisplayMenu::SetText(const char *Text, bool FixedFont) {
if (!Text)
return;
menuView->AdjustContentBackground(this->MenuCategory(), menuCategoryLast, videoWindowRect);
- detailView = new cNopacityMenuDetailTextView(osd, Text);
+ detailView = new cNopacityDetailView(dvText, osd, imgCache);
menuView->SetDetailViewSize(dvText, detailView);
- detailView->SetFonts();
- detailView->SetContent();
- detailView->SetContentHeight();
- detailView->CreatePixmaps();
- detailView->Render();
- if (detailView->Scrollable()) {
- double height = detailView->ScrollbarSize();
- double offset = 0.0;
- menuView->DrawScrollbar(height, offset);
- }
+ detailView->SetText(Text);
+ detailView->Start();
}
void cNopacityDisplayMenu::Flush(void) {
+ //int start = cTimeMs::Now();
menuView->DrawDate(initial);
if (MenuCategory() == mcMain) {
- if (config.showDiscUsage)
+ if (config.GetValue("showDiscUsage"))
DrawDisk();
bool timersChanged = Timers.Modified(lastTimersState);
int numConflicts = 0;
- if (config.checkTimerConflict)
+ if (config.GetValue("checkTimerConflict"))
numConflicts = CheckTimerConflict(timersChanged);
- if (config.showTimers)
+ if (config.GetValue("showTimers"))
DrawTimers(timersChanged, numConflicts);
}
if (initial) {
- if (config.menuFadeTime)
+ if (FadeTime)
Start();
}
initMenu = false;
@@ -747,9 +737,9 @@ void cNopacityDisplayMenu::Action(void) {
}
for (cNopacityTimer *t = timers.First(); Running() && t; t = timers.Next(t))
t->SetAlpha(Alpha);
+ cPixmap::Unlock();
if (Running())
osd->Flush();
- cPixmap::Unlock();
int Delta = cTimeMs::Now() - Now;
if (Running() && (Delta < FrameTime))
cCondWait::SleepMs(FrameTime - Delta);
diff --git a/displaymenu.h b/displaymenu.h
index 3089f0d..761bb51 100644
--- a/displaymenu.h
+++ b/displaymenu.h
@@ -1,10 +1,15 @@
#ifndef __NOPACITY_DISPLAYMENU_H
#define __NOPACITY_DISPLAYMENU_H
+#include "nopacity.h"
+#include "menuitem.h"
+#include <vdr/thread.h>
+
class cNopacityDisplayMenu : public cSkinDisplayMenu , cThread {
private:
+ cImageCache *imgCache;
cNopacityDisplayMenuView *menuView;
- cNopacityMenuDetailView *detailView;
+ cNopacityDetailView *detailView;
cOsd *osd;
eMenuCategory menuCategoryLast;
int FrameTime;
@@ -19,10 +24,10 @@ private:
int currentNumItems;
cList<cNopacityTimer> timers;
cList<cNopacityMenuItem> menuItems;
- int handleBackgrounds[14];
- int handleButtons[4];
int positionButtons[4];
cRect videoWindowRect;
+ int currentFeed;
+ void SetNextFeed(void);
void DrawDisk(void);
int CheckTimerConflict(bool timersChanged);
void DrawTimers(bool timersChanged, int numConflicts);
@@ -32,7 +37,7 @@ private:
protected:
int Tab(int n);
public:
- cNopacityDisplayMenu(void);
+ cNopacityDisplayMenu(cImageCache *imgCache);
virtual ~cNopacityDisplayMenu();
virtual void Scroll(bool Up, bool Page);
virtual int MaxItems(void);
diff --git a/displaymenuview.c b/displaymenuview.c
index a454402..9a94f25 100644
--- a/displaymenuview.c
+++ b/displaymenuview.c
@@ -1,6 +1,7 @@
#include "displaymenuview.h"
-cNopacityDisplayMenuView::cNopacityDisplayMenuView() {
+cNopacityDisplayMenuView::cNopacityDisplayMenuView(cImageCache *imgCache) {
+ this->imgCache = imgCache;
diskUsageAlert = 95;
pixmapStatus = NULL;
pixmapHeaderIcon = NULL;
@@ -8,98 +9,88 @@ cNopacityDisplayMenuView::cNopacityDisplayMenuView() {
cNopacityDisplayMenuView::~cNopacityDisplayMenuView(void) {
osd->DestroyPixmap(pixmapHeader);
+ osd->DestroyPixmap(pixmapHeaderForeground);
osd->DestroyPixmap(pixmapHeaderLogo);
osd->DestroyPixmap(pixmapHeaderLabel);
osd->DestroyPixmap(pixmapDate);
osd->DestroyPixmap(pixmapFooter);
+ osd->DestroyPixmap(pixmapFooterBack);
+ osd->DestroyPixmap(pixmapButtonsText);
osd->DestroyPixmap(pixmapContent);
- osd->DestroyPixmap(pixmapScrollbar);
+ osd->DestroyPixmap(pixmapScrollbar);
+ osd->DestroyPixmap(pixmapScrollbarBack);
osd->DestroyPixmap(pixmapDiskUsage);
osd->DestroyPixmap(pixmapDiskUsageIcon);
osd->DestroyPixmap(pixmapDiskUsageLabel);
if (pixmapHeaderIcon)
osd->DestroyPixmap(pixmapHeaderIcon);
-
- delete fontHeader;
- delete fontDate;
- delete fontMenuitemLarge;
- delete fontMenuitemSchedule;
- delete fontMenuitemScheduleSmall;
- delete fontMenuitemChannel;
- delete fontMenuitemChannelSmall;
- delete fontMenuitemRecordings;
- delete fontMenuitemRecordingsSmall;
- delete fontMenuitemTimers;
- delete fontMenuitemTimersSmall;
- delete fontMenuitemDefault;
- delete fontDiskUsage;
- delete fontDiskUsagePercent;
- delete fontTimers;
- delete fontTimersHead;
- delete fontButtons;
- delete fontMessage;
- delete fontEPGInfoWindow;
}
cOsd *cNopacityDisplayMenuView::createOsd(void) {
- osdLeft = cOsd::OsdLeft();
- osdTop = cOsd::OsdTop();
- osdWidth = cOsd::OsdWidth();
- osdHeight = cOsd::OsdHeight();
- osd = CreateOsd(osdLeft, osdTop, osdWidth, osdHeight);
+ osd = CreateOsd(geoManager->osdLeft, geoManager->osdTop, geoManager->osdWidth, geoManager->osdHeight);
return osd;
}
-void cNopacityDisplayMenuView::SetGeometry(void) {
- spaceMenu = 5;
- widthScrollbar = 20;
- dateWidth = osdWidth * 0.3;
- headerHeight = osdHeight * config.headerHeight / 100;
- footerHeight = osdHeight * config.footerHeight / 100;
- contentHeight = osdHeight - headerHeight - footerHeight;
- contentWidthMain = osdWidth * config.menuWidthMain / 100;
- contentWidthSchedules = osdWidth * config.menuWidthSchedules / 100;
- contentWidthChannels = osdWidth * config.menuWidthChannels / 100;
- contentWidthTimers = osdWidth * config.menuWidthTimers / 100;
- contentWidthRecordings = osdWidth * config.menuWidthRecordings / 100;
- contentWidthSetup = osdWidth * config.menuWidthSetup / 100;
- contentWidthFull = osdWidth - widthScrollbar - spaceMenu;
- contentWidthMinimum = Minimum(contentWidthMain,
- contentWidthSchedules,
- contentWidthChannels,
- contentWidthTimers,
- contentWidthRecordings,
- contentWidthSetup);
- menuItemWidthDefault = contentWidthFull - 4 * spaceMenu;
- menuItemWidthMain = contentWidthMain - 4*spaceMenu;
- menuItemWidthSchedule = contentWidthSchedules - 4*spaceMenu;
- menuItemWidthChannel = contentWidthChannels - 4*spaceMenu;
- menuItemWidthTimer = contentWidthTimers - 4*spaceMenu;
- menuItemWidthRecording = contentWidthRecordings - 4*spaceMenu;
- menuItemWidthSetup = contentWidthSetup - 4*spaceMenu;
- menuItemHeightMain = config.iconHeight + 2;
- menuItemHeightSchedule = config.menuItemLogoHeight + 2;
- menuItemHeightDefault = contentHeight / config.numDefaultMenuItems - spaceMenu;
- menuItemHeightRecordings = config.menuRecFolderSize + 2;
- diskUsageWidth = diskUsageHeight = osdWidth * config.menuSizeDiskUsage / 100;
- timersWidth = osdWidth * config.menuWidthRightItems / 100;
- buttonsBorder = 10;
- buttonWidth = (osdWidth / 4) - 2 * buttonsBorder;
- buttonHeight = footerHeight - 3 * buttonsBorder;
- messageWidth = 0.8 * osdWidth;
- messageHeight = 0.1 * osdHeight;
- SetDescriptionTextWindowSize();
-}
-
void cNopacityDisplayMenuView::SetDescriptionTextWindowSize(void) {
- int xSchedules = (config.menuAdjustLeft) ? (2 * spaceMenu + contentWidthSchedules + widthScrollbar) : (spaceMenu);
- int xRecordings = (config.menuAdjustLeft) ? (2 * spaceMenu + contentWidthRecordings + widthScrollbar) : (spaceMenu);
- int height = config.menuHeightInfoWindow * (contentHeight - 2*spaceMenu) / 100;
- int y = headerHeight + (contentHeight - height - spaceMenu);
- int widthSchedules = (config.menuAdjustLeft) ? (osdWidth - xSchedules - spaceMenu) : (osdWidth - contentWidthSchedules - widthScrollbar - 2 * spaceMenu);
- int widthRecordings = (config.menuAdjustLeft) ? (osdWidth - xRecordings - spaceMenu) : (osdWidth - contentWidthRecordings - widthScrollbar - 2 * spaceMenu);
- textWindowSizeSchedules = cRect(xSchedules,y,widthSchedules,height);
- textWindowSizeRecordings = cRect(xRecordings,y,widthRecordings,height);
+ int xSchedules, xRecordings, xChannels, xTimers;
+ int widthSchedules, widthRecordings, widthChannels, widthTimers;
+ if (config.GetValue("menuAdjustLeft")) {
+ xSchedules = 2 * geoManager->menuSpace
+ + geoManager->menuContentWidthSchedules
+ + geoManager->menuWidthScrollbar;
+ xRecordings = 2 * geoManager->menuSpace
+ + geoManager->menuContentWidthRecordings
+ + geoManager->menuWidthScrollbar;
+ xChannels = 2 * geoManager->menuSpace
+ + geoManager->menuContentWidthChannels
+ + geoManager->menuWidthScrollbar;
+ xTimers = 2 * geoManager->menuSpace
+ + geoManager->menuContentWidthTimers
+ + geoManager->menuWidthScrollbar;
+ widthSchedules = geoManager->osdWidth - xSchedules - geoManager->menuSpace;
+ widthRecordings = geoManager->osdWidth - xRecordings - geoManager->menuSpace;
+ widthChannels = geoManager->osdWidth - xChannels - geoManager->menuSpace;
+ widthTimers = geoManager->osdWidth - xTimers - geoManager->menuSpace;
+ } else {
+ xSchedules = geoManager->menuSpace;
+ xRecordings = geoManager->menuSpace;
+ xChannels = geoManager->menuSpace;
+ xTimers = geoManager->menuSpace;
+ widthSchedules = geoManager->osdWidth
+ - geoManager->menuContentWidthSchedules
+ - geoManager->menuWidthScrollbar
+ - 2 * geoManager->menuSpace;
+ widthRecordings = geoManager->osdWidth
+ - geoManager->menuContentWidthRecordings
+ - geoManager->menuWidthScrollbar
+ - 2 * geoManager->menuSpace;
+ widthChannels = geoManager->osdWidth
+ - geoManager->menuContentWidthChannels
+ - geoManager->menuWidthScrollbar
+ - 2 * geoManager->menuSpace;
+ widthTimers = geoManager->osdWidth
+ - geoManager->menuContentWidthTimers
+ - geoManager->menuWidthScrollbar
+ - 2 * geoManager->menuSpace;
+ }
+ int heightFull = geoManager->menuContentHeight - 2*geoManager->menuSpace;
+ int height = config.GetValue("menuHeightInfoWindow") * heightFull / 100;
+ int y = geoManager->menuHeaderHeight + (geoManager->menuContentHeight - height - geoManager->menuSpace);
+ int yFullScreen = geoManager->menuHeaderHeight + geoManager->menuSpace;
+
+ if (config.GetValue("menuSchedulesWindowMode") == 0)
+ textWindowSizeSchedules = cRect(xSchedules,y,widthSchedules,height);
+ else
+ textWindowSizeSchedules = cRect(xSchedules,yFullScreen,widthSchedules,heightFull);
+ if (config.GetValue("menuRecordingsWindowMode") == 0)
+ textWindowSizeRecordings = cRect(xRecordings,y,widthRecordings,height);
+ else
+ textWindowSizeRecordings = cRect(xRecordings,yFullScreen,widthRecordings,heightFull);
+ if (config.GetValue("menuTimersWindowMode") == 0)
+ textWindowSizeTimers = cRect(xTimers,y,widthTimers,height);
+ else
+ textWindowSizeTimers = cRect(xTimers,yFullScreen,widthTimers,heightFull);
+ textWindowSizeChannels = cRect(xChannels,y,widthChannels,height);
}
cRect *cNopacityDisplayMenuView::GetDescriptionTextWindowSize(eMenuCategory menuCat) {
@@ -108,6 +99,10 @@ cRect *cNopacityDisplayMenuView::GetDescriptionTextWindowSize(eMenuCategory menu
return &textWindowSizeSchedules;
case mcRecording:
return &textWindowSizeRecordings;
+ case mcChannel:
+ return &textWindowSizeChannels;
+ case mcTimer:
+ return &textWindowSizeTimers;
default:
return NULL;
}
@@ -117,75 +112,83 @@ cRect *cNopacityDisplayMenuView::GetDescriptionTextWindowSize(eMenuCategory menu
int cNopacityDisplayMenuView::GetContentWidth(eMenuCategory menuCat) {
switch (menuCat) {
case mcMain:
- if (config.narrowMainMenu)
- return contentWidthMain;
+ if (config.GetValue("narrowMainMenu"))
+ return geoManager->menuContentWidthMain;
else
- return contentWidthFull;
+ return geoManager->menuContentWidthFull;
case mcSetup:
- if (config.narrowSetupMenu)
- return contentWidthSetup;
+ if (config.GetValue("narrowSetupMenu"))
+ return geoManager->menuContentWidthSetup;
else
- return contentWidthFull;
+ return geoManager->menuContentWidthFull;
case mcSchedule:
case mcScheduleNow:
case mcScheduleNext:
- if (config.narrowScheduleMenu)
- return contentWidthSchedules;
+ if (config.GetValue("narrowScheduleMenu"))
+ return geoManager->menuContentWidthSchedules;
else
- return contentWidthFull;
+ return geoManager->menuContentWidthFull;
case mcChannel:
- if (config.narrowChannelMenu)
- return contentWidthChannels;
+ if (config.GetValue("narrowChannelMenu"))
+ return geoManager->menuContentWidthChannels;
else
- return contentWidthFull;
+ return geoManager->menuContentWidthFull;
case mcTimer:
- if (config.narrowTimerMenu)
- return contentWidthTimers;
+ if (config.GetValue("narrowTimerMenu"))
+ return geoManager->menuContentWidthTimers;
else
- return contentWidthFull;
+ return geoManager->menuContentWidthFull;
case mcRecording:
- if (config.narrowRecordingMenu)
- return contentWidthRecordings;
+ if (config.GetValue("narrowRecordingMenu"))
+ return geoManager->menuContentWidthRecordings;
else
- return contentWidthFull;
+ return geoManager->menuContentWidthFull;
default:
- return contentWidthFull;
+ return geoManager->menuContentWidthFull;
}
- return contentWidthFull;
+ return geoManager->menuContentWidthFull;
}
void cNopacityDisplayMenuView::CreatePixmaps(void) {
- pixmapHeader = osd->CreatePixmap(1, cRect(0, 0, osdWidth, headerHeight));
- int dateX = (config.menuAdjustLeft) ? (osdWidth - dateWidth) : 0;
- pixmapDate = osd->CreatePixmap(2, cRect(dateX, 0, dateWidth, headerHeight));
- int logoX = (config.menuAdjustLeft) ? 0 : (osdWidth - config.menuHeaderLogoWidth);
- pixmapHeaderLogo = osd->CreatePixmap(-1, cRect(logoX, 0, config.menuHeaderLogoWidth, config.menuHeaderLogoHeight));
- int labelX = (config.menuAdjustLeft) ? 0 : dateWidth;
- pixmapHeaderLabel = osd->CreatePixmap(2, cRect(labelX, 0, osdWidth - dateWidth, headerHeight));
- pixmapFooter = osd->CreatePixmap(1, cRect(0, osdHeight-footerHeight, osdWidth, footerHeight));
- int drawPortWidth = osdWidth + contentWidthFull - contentWidthMinimum;
- pixmapContent = osd->CreatePixmap(1, cRect(0, headerHeight, osdWidth, contentHeight),
- cRect(0, 0, drawPortWidth, contentHeight));
- int diskUsageX = (config.menuAdjustLeft) ? (osdWidth - diskUsageWidth - 10) : 10;
- pixmapDiskUsage = osd->CreatePixmap(2, cRect(diskUsageX, headerHeight + spaceMenu, diskUsageWidth, diskUsageHeight));
- pixmapDiskUsageIcon = osd->CreatePixmap(3, cRect(diskUsageX + 2, headerHeight + spaceMenu + 2, diskUsageWidth - 4, diskUsageHeight - 4));
- pixmapDiskUsageLabel = osd->CreatePixmap(4, cRect(diskUsageX + 2, headerHeight + spaceMenu + 2, diskUsageWidth - 4, diskUsageHeight - 4));
- int scrollbarX = (config.menuAdjustLeft) ? contentWidthMain : (osdWidth - contentWidthMain);
- pixmapScrollbar = osd->CreatePixmap(2, cRect(scrollbarX, headerHeight + spaceMenu, widthScrollbar, contentHeight - 2 * spaceMenu));
+ pixmapHeader = osd->CreatePixmap(1, cRect(0, 0, geoManager->osdWidth, geoManager->menuHeaderHeight));
+ pixmapHeaderForeground = osd->CreatePixmap(3, cRect(0, 0, geoManager->osdWidth, geoManager->menuHeaderHeight));
+ int dateX = (config.GetValue("menuAdjustLeft")) ? (geoManager->osdWidth - geoManager->menuDateWidth) : 0;
+ pixmapDate = osd->CreatePixmap(2, cRect(dateX, 0, geoManager->menuDateWidth, geoManager->menuHeaderHeight));
+ int logoX = (config.GetValue("menuAdjustLeft")) ? 0 : (geoManager->osdWidth - geoManager->menuHeaderVDRLogoWidth);
+ pixmapHeaderLogo = osd->CreatePixmap(-1, cRect(logoX, 2, geoManager->menuHeaderVDRLogoWidth, geoManager->menuHeaderHeight - 4));
+ int labelX = (config.GetValue("menuAdjustLeft")) ? 0 : geoManager->menuDateWidth;
+ pixmapHeaderLabel = osd->CreatePixmap(2, cRect(labelX, 0, geoManager->osdWidth - geoManager->menuDateWidth, geoManager->menuHeaderHeight));
+ pixmapFooter = osd->CreatePixmap(2, cRect(0, geoManager->osdHeight - geoManager->menuFooterHeight, geoManager->osdWidth, geoManager->menuFooterHeight));
+ pixmapFooterBack = osd->CreatePixmap(1, cRect(0, geoManager->osdHeight - geoManager->menuFooterHeight, geoManager->osdWidth, geoManager->menuFooterHeight));
+ pixmapButtonsText = osd->CreatePixmap(3, cRect(0, geoManager->osdHeight - geoManager->menuFooterHeight, geoManager->osdWidth, geoManager->menuFooterHeight));
+ int drawPortWidth = geoManager->osdWidth + geoManager->menuContentWidthFull - geoManager->menuContentWidthMinimum;
+ pixmapContent = osd->CreatePixmap(1, cRect(0, geoManager->menuHeaderHeight, geoManager->osdWidth, geoManager->menuContentHeight),
+ cRect(0, 0, drawPortWidth, geoManager->menuContentHeight));
+ int diskUsageX = (config.GetValue("menuAdjustLeft")) ? (geoManager->osdWidth - geoManager->menuDiskUsageWidth - 10) : 10;
+ pixmapDiskUsage = osd->CreatePixmap(2, cRect(diskUsageX, geoManager->menuHeaderHeight + geoManager->menuSpace, geoManager->menuDiskUsageWidth, geoManager->menuDiskUsageHeight));
+ pixmapDiskUsageIcon = osd->CreatePixmap(3, cRect(diskUsageX + 2, geoManager->menuHeaderHeight + geoManager->menuSpace + 2, geoManager->menuDiskUsageWidth - 4, geoManager->menuDiskUsageHeight - 4));
+ pixmapDiskUsageLabel = osd->CreatePixmap(4, cRect(diskUsageX + 2, geoManager->menuHeaderHeight + geoManager->menuSpace + 2, geoManager->menuDiskUsageWidth - 4, geoManager->menuDiskUsageHeight - 4));
+ int scrollbarX = (config.GetValue("menuAdjustLeft")) ? geoManager->menuContentWidthMain : (geoManager->osdWidth - geoManager->menuContentWidthMain);
+ pixmapScrollbar = osd->CreatePixmap(3, cRect(scrollbarX, geoManager->menuHeaderHeight + geoManager->menuSpace, geoManager->menuWidthScrollbar, geoManager->menuContentHeight - 2 * geoManager->menuSpace));
+ pixmapScrollbarBack = osd->CreatePixmap(2, cRect(scrollbarX, geoManager->menuHeaderHeight + geoManager->menuSpace, geoManager->menuWidthScrollbar, geoManager->menuContentHeight - 2 * geoManager->menuSpace));
pixmapHeaderLogo->Fill(clrTransparent);
pixmapHeaderLabel->Fill(clrTransparent);
pixmapDiskUsage->Fill(clrTransparent);
pixmapDiskUsageIcon->Fill(clrTransparent);
pixmapDiskUsageLabel->Fill(clrTransparent);
- if (config.menuFadeTime) {
+ if (config.GetValue("menuFadeTime")) {
pixmapHeader->SetAlpha(0);
+ pixmapHeaderForeground->SetAlpha(0);
pixmapHeaderLogo->SetAlpha(0);
pixmapHeaderLabel->SetAlpha(0);
pixmapDate->SetAlpha(0);
pixmapFooter->SetAlpha(0);
+ pixmapFooterBack->SetAlpha(0);
+ pixmapButtonsText->SetAlpha(0);
pixmapContent->SetAlpha(0);
+ pixmapScrollbarBack->SetAlpha(0);
pixmapScrollbar->SetAlpha(0);
pixmapDiskUsage->SetAlpha(0);
pixmapDiskUsageIcon->SetAlpha(0);
@@ -195,158 +198,76 @@ void cNopacityDisplayMenuView::CreatePixmaps(void) {
void cNopacityDisplayMenuView::SetPixmapAlpha(int Alpha) {
pixmapHeader->SetAlpha(Alpha);
+ pixmapHeaderForeground->SetAlpha(Alpha);
pixmapHeaderLogo->SetAlpha(Alpha);
pixmapHeaderLabel->SetAlpha(Alpha);
pixmapDate->SetAlpha(Alpha);
pixmapContent->SetAlpha(Alpha);
pixmapFooter->SetAlpha(Alpha);
+ pixmapFooterBack->SetAlpha(Alpha);
+ pixmapButtonsText->SetAlpha(Alpha);
+ pixmapScrollbarBack->SetAlpha(Alpha);
pixmapScrollbar->SetAlpha(Alpha);
pixmapDiskUsage->SetAlpha(Alpha);
pixmapDiskUsageIcon->SetAlpha(Alpha);
pixmapDiskUsageLabel->SetAlpha(Alpha);
}
-void cNopacityDisplayMenuView::CreateFonts(void) {
- fontHeader = cFont::CreateFont(config.fontName, headerHeight / 2 + config.fontHeader);
- fontDate = cFont::CreateFont(config.fontName, headerHeight / 2 + config.fontDate);
- fontMenuitemLarge = cFont::CreateFont(config.fontName, menuItemHeightMain/3 + 4 + config.fontMenuitemLarge);
- fontMenuitemSchedule = cFont::CreateFont(config.fontName, menuItemHeightSchedule / 4 + 5 + config.fontMenuitemSchedule);
- fontMenuitemScheduleSmall = cFont::CreateFont(config.fontName, menuItemHeightSchedule / 4 - 5 + config.fontMenuitemScheduleSmall);
- fontMenuitemChannel = cFont::CreateFont(config.fontName, menuItemHeightSchedule / 3 + config.fontMenuitemChannel);
- fontMenuitemChannelSmall = cFont::CreateFont(config.fontName, menuItemHeightSchedule / 5 - 2 + config.fontMenuitemChannelSmall);
- fontMenuitemRecordings = cFont::CreateFont(config.fontName, menuItemHeightRecordings / 2 - 14 + config.fontMenuitemRecordings);
- fontMenuitemRecordingsSmall = cFont::CreateFont(config.fontName, menuItemHeightRecordings / 4 - 3 + config.fontMenuitemRecordingsSmall);
- fontMenuitemTimers = cFont::CreateFont(config.fontName, menuItemHeightSchedule / 3 + config.fontMenuitemTimers);
- fontMenuitemTimersSmall = cFont::CreateFont(config.fontName, menuItemHeightSchedule / 4 - 3 + config.fontMenuitemTimersSmall);
- fontMenuitemDefault = cFont::CreateFont(config.fontName, menuItemHeightDefault * 2 / 3 + config.fontMenuitemDefault);
- fontDiskUsage = cFont::CreateFont(config.fontName, diskUsageHeight/6 - 2 + config.fontDiskUsage);
- fontDiskUsagePercent = cFont::CreateFont(config.fontName, diskUsageHeight/5 - 4 + config.fontDiskUsagePercent);
- fontTimersHead = cFont::CreateFont(config.fontName, (contentHeight - 3*spaceMenu - diskUsageHeight) / 25 + config.fontTimersHead);
- fontTimers = cFont::CreateFont(config.fontName, (contentHeight - 3*spaceMenu - diskUsageHeight) / 25 - 6 + config.fontTimers);
- fontButtons = cFont::CreateFont(config.fontName, buttonHeight*0.8 + config.fontButtons);
- fontMessage = cFont::CreateFont(config.fontName, messageHeight / 3 + config.fontMessageMenu);
- fontEPGInfoWindow = cFont::CreateFont(config.fontName, (config.menuHeightInfoWindow * contentHeight / 100)/ 6 + config.fontEPGInfoWindow);
-}
-
-cFont *cNopacityDisplayMenuView::GetMenuItemFont(eMenuCategory menuCat) {
- switch (menuCat) {
- case mcUnknown:
- return fontMenuitemDefault;
- case mcMain:
- case mcSetup:
- return fontMenuitemLarge;
- case mcSchedule:
- return fontMenuitemSchedule;
- case mcChannel:
- return fontMenuitemChannel;
- case mcTimer:
- return fontMenuitemTimers;
- case mcRecording:
- return fontMenuitemRecordings;
- default:
- return fontMenuitemDefault;
- }
- return fontMenuitemDefault;
-}
-
-cFont *cNopacityDisplayMenuView::GetMenuItemFontSmall(eMenuCategory menuCat) {
- switch (menuCat) {
- case mcSchedule:
- return fontMenuitemScheduleSmall;
- case mcChannel:
- return fontMenuitemChannelSmall;
- case mcTimer:
- return fontMenuitemTimersSmall;
- case mcRecording:
- return fontMenuitemTimersSmall;
- default:
- return fontMenuitemScheduleSmall;
- }
- return fontMenuitemScheduleSmall;
-}
-
-cFont *cNopacityDisplayMenuView::GetEPGWindowFont(void) {
- return fontEPGInfoWindow;
-}
-
void cNopacityDisplayMenuView::GetMenuItemSize(eMenuCategory menuCat, cPoint *itemSize) {
int itemWidth = 0;
int itemHeight = 0;
switch (menuCat) {
case mcUnknown:
- itemWidth = menuItemWidthDefault;
- itemHeight = menuItemHeightDefault;
+ itemWidth = geoManager->menuItemWidthDefault;
+ itemHeight = geoManager->menuItemHeightDefault;
break;
case mcMain:
- itemWidth = menuItemWidthMain;
- itemHeight = menuItemHeightMain;
+ itemWidth = geoManager->menuItemWidthMain;
+ itemHeight = geoManager->menuItemHeightMain;
break;
case mcSetup:
- itemWidth = menuItemWidthSetup;
- itemHeight = menuItemHeightMain;
+ itemWidth = geoManager->menuItemWidthSetup;
+ itemHeight = geoManager->menuItemHeightMain;
break;
case mcSchedule:
case mcScheduleNow:
case mcScheduleNext:
- itemWidth = menuItemWidthSchedule;
- itemHeight = menuItemHeightSchedule;
+ itemWidth = geoManager->menuItemWidthSchedule;
+ itemHeight = geoManager->menuItemHeightSchedule;
break;
case mcChannel:
- itemWidth = menuItemWidthChannel;
- itemHeight = menuItemHeightSchedule;
+ itemWidth = geoManager->menuItemWidthChannel;
+ itemHeight = geoManager->menuItemHeightSchedule;
break;
case mcTimer:
- itemWidth = menuItemWidthTimer;
- itemHeight = menuItemHeightSchedule;
+ itemWidth = geoManager->menuItemWidthTimer;
+ itemHeight = geoManager->menuItemHeightSchedule;
break;
case mcRecording:
- itemWidth = menuItemWidthRecording;
- itemHeight = menuItemHeightRecordings;
+ itemWidth = geoManager->menuItemWidthRecording;
+ itemHeight = geoManager->menuItemHeightRecordings;
break;
default:
- itemWidth = menuItemWidthDefault;
- itemHeight = menuItemHeightDefault;
+ itemWidth = geoManager->menuItemWidthDefault;
+ itemHeight = geoManager->menuItemHeightDefault;
break;
}
itemSize->Set(itemWidth, itemHeight);
}
-int cNopacityDisplayMenuView::GetMaxItems(eMenuCategory menuCat) {
- int maxItems = 0;
- switch (menuCat) {
- case mcMain:
- case mcSetup:
- maxItems = contentHeight / (menuItemHeightMain + spaceMenu);
- break;
- case mcSchedule:
- case mcScheduleNow:
- case mcScheduleNext:
- case mcChannel:
- case mcTimer:
- maxItems = contentHeight / (menuItemHeightSchedule + spaceMenu);
- break;
- case mcRecording:
- maxItems = contentHeight / (menuItemHeightRecordings + spaceMenu);
- break;
- default:
- maxItems = config.numDefaultMenuItems;
- }
- return maxItems;
-}
-
int cNopacityDisplayMenuView::GetMenuTop(int numItems, int itemHeight) {
- return headerHeight + (contentHeight - numItems*(itemHeight + spaceMenu))/2;
+ return geoManager->menuHeaderHeight + (geoManager->menuContentHeight - numItems*(itemHeight + geoManager->menuSpace))/2;
}
int cNopacityDisplayMenuView::GetMenuItemLeft(int itemWidth) {
- int menuLeft = spaceMenu;
- if (!config.menuAdjustLeft)
- menuLeft = osdWidth - itemWidth - spaceMenu;
+ int menuLeft = geoManager->menuSpace;
+ if (!config.GetValue("menuAdjustLeft"))
+ menuLeft = geoManager->osdWidth - itemWidth - geoManager->menuSpace;
return menuLeft;
}
void cNopacityDisplayMenuView::SetAvrgFontWidth(void) {
- avrgFontWidth = fontMenuitemDefault->Width("x")+3;
+ avrgFontWidth = fontManager->menuItemDefault->Width("x")+3;
}
void cNopacityDisplayMenuView::SetTabs(int Tab1, int Tab2, int Tab3, int Tab4, int Tab5) {
@@ -365,120 +286,91 @@ void cNopacityDisplayMenuView::SetTabs(int Tab1, int Tab2, int Tab3, int Tab4, i
}
int cNopacityDisplayMenuView::GetEditableWidth(void) {
- return contentWidthFull*0.5;
+ return geoManager->menuContentWidthFull*0.5;
}
int cNopacityDisplayMenuView::GetTextAreaWidth(void) {
- return contentWidthFull - 2*spaceMenu;
+ return geoManager->menuContentWidthFull - 2*geoManager->menuSpace;
}
const cFont *cNopacityDisplayMenuView::GetTextAreaFont(bool FixedFont) {
- return cFont::CreateFont(config.fontName, contentHeight / 25 + config.fontDetailView);
-}
-
-void cNopacityDisplayMenuView::CreateBackgroundImages(int *handleBackgrounds, int *handleButtons) {
- cImageLoader imgLoader;
- //Default Menus
- imgLoader.DrawBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), menuItemWidthDefault-2, menuItemHeightDefault-2);
- handleBackgrounds[0] = cOsdProvider::StoreImage(imgLoader.GetImage());
- imgLoader.DrawBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), menuItemWidthDefault-2, menuItemHeightDefault-2);
- handleBackgrounds[1] = cOsdProvider::StoreImage(imgLoader.GetImage());
- //Main Menu
- cPoint itemSize;
- GetMenuItemSize(mcMain, &itemSize);
- imgLoader.DrawBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), itemSize.X()-2, itemSize.Y()-2);
- handleBackgrounds[2] = cOsdProvider::StoreImage(imgLoader.GetImage());
- imgLoader.DrawBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), itemSize.X()-2, itemSize.Y()-2);
- handleBackgrounds[3] = cOsdProvider::StoreImage(imgLoader.GetImage());
- //Schedules Menu
- GetMenuItemSize(mcSchedule, &itemSize);
- imgLoader.DrawBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), itemSize.X()-2, itemSize.Y()-2);
- handleBackgrounds[4] = cOsdProvider::StoreImage(imgLoader.GetImage());
- imgLoader.DrawBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), itemSize.X()-2, itemSize.Y()-2);
- handleBackgrounds[5] = cOsdProvider::StoreImage(imgLoader.GetImage());
- //Channels Menu
- GetMenuItemSize(mcChannel, &itemSize);
- imgLoader.DrawBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), itemSize.X()-2, itemSize.Y()-2);
- handleBackgrounds[6] = cOsdProvider::StoreImage(imgLoader.GetImage());
- imgLoader.DrawBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), itemSize.X()-2, itemSize.Y()-2);
- handleBackgrounds[7] = cOsdProvider::StoreImage(imgLoader.GetImage());
- //Recordings Menu
- GetMenuItemSize(mcRecording, &itemSize);
- imgLoader.DrawBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), itemSize.X()-2, itemSize.Y()-2);
- handleBackgrounds[8] = cOsdProvider::StoreImage(imgLoader.GetImage());
- imgLoader.DrawBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), itemSize.X()-2, itemSize.Y()-2);
- handleBackgrounds[9] = cOsdProvider::StoreImage(imgLoader.GetImage());
- //Timers Menu
- GetMenuItemSize(mcTimer, &itemSize);
- imgLoader.DrawBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), itemSize.X()-2, itemSize.Y()-2);
- handleBackgrounds[10] = cOsdProvider::StoreImage(imgLoader.GetImage());
- imgLoader.DrawBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), itemSize.X()-2, itemSize.Y()-2);
- handleBackgrounds[11] = cOsdProvider::StoreImage(imgLoader.GetImage());
- //Setup Menu
- GetMenuItemSize(mcSetup, &itemSize);
- imgLoader.DrawBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), itemSize.X()-2, itemSize.Y()-2);
- handleBackgrounds[12] = cOsdProvider::StoreImage(imgLoader.GetImage());
- imgLoader.DrawBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), itemSize.X()-2, itemSize.Y()-2);
- handleBackgrounds[13] = cOsdProvider::StoreImage(imgLoader.GetImage());
-
- imgLoader.DrawBackground(Theme.Color(clrMenuBack), Theme.Color(clrButtonRed), buttonWidth-4, buttonHeight-4);
- handleButtons[0] = cOsdProvider::StoreImage(imgLoader.GetImage());
- imgLoader.DrawBackground(Theme.Color(clrMenuBack), Theme.Color(clrButtonGreen), buttonWidth-4, buttonHeight-4);
- handleButtons[1] = cOsdProvider::StoreImage(imgLoader.GetImage());
- imgLoader.DrawBackground(Theme.Color(clrMenuBack), Theme.Color(clrButtonYellow), buttonWidth-4, buttonHeight-4);
- handleButtons[2] = cOsdProvider::StoreImage(imgLoader.GetImage());
- imgLoader.DrawBackground(Theme.Color(clrMenuBack), Theme.Color(clrButtonBlue), buttonWidth-4, buttonHeight-4);
- handleButtons[3] = cOsdProvider::StoreImage(imgLoader.GetImage());
+ return cFont::CreateFont(config.fontName, geoManager->menuContentHeight / 25 + config.GetValue("fontDetailView"));
}
void cNopacityDisplayMenuView::DrawBorderDecoration() {
- cImageLoader imgLoader;
- bool mirrorHeader = (config.menuAdjustLeft) ? false : true;
- imgLoader.DrawBackground(Theme.Color(clrMenuHeaderBlend), Theme.Color(clrMenuHeader), osdWidth, headerHeight, mirrorHeader);
- pixmapHeader->DrawImage(cPoint(0,0), imgLoader.GetImage());
- pixmapFooter->Fill(Theme.Color(clrMenuBack));
-
+ if (config.GetValue("displayType") == dtGraphical) {
+ cImage *headerImageBack = imgCache->GetSkinElement(seMenuHeader);
+ if (headerImageBack)
+ pixmapHeader->DrawImage(cPoint(0, 0), *headerImageBack);
+ else
+ pixmapHeader->Fill(Theme.Color(clrMenuBack));
+ cImage *headerImageTop = imgCache->GetSkinElement(seMenuHeaderTop);
+ if (headerImageTop)
+ pixmapHeaderForeground->DrawImage(cPoint(0, 0), *headerImageTop);
+ else
+ pixmapHeaderForeground->Fill(clrTransparent);
+ } else if (config.GetValue("displayType") == dtBlending) {
+ pixmapHeaderForeground->Fill(clrTransparent);
+ cImage *headerImage = imgCache->GetSkinElement(seMenuHeader);
+ if (headerImage)
+ pixmapHeader->DrawImage(cPoint(0, 0), *headerImage);
+ else
+ pixmapHeader->Fill(Theme.Color(clrMenuBack));
+ } else {
+ pixmapHeaderForeground->Fill(clrTransparent);
+ pixmapHeader->Fill(Theme.Color(clrMenuBack));
+ }
+ pixmapFooter->Fill(clrTransparent);
+ pixmapFooterBack->Fill(Theme.Color(clrMenuBack));
+ pixmapButtonsText->Fill(clrTransparent);
+
int borderWidth = 2;
int radius = 10;
pixmapContent->Fill(clrTransparent);
- if (config.menuAdjustLeft) {
+ if (config.GetValue("menuAdjustLeft")) {
//Background
- pixmapContent->DrawRectangle(cRect(0, 0, contentWidthFull - radius, contentHeight), Theme.Color(clrMenuBack));
+ pixmapContent->DrawRectangle(cRect(0, 0, geoManager->menuContentWidthFull - radius, geoManager->menuContentHeight), Theme.Color(clrMenuBack));
+ pixmapContent->DrawRectangle(cRect(geoManager->menuContentWidthFull - radius, 0, geoManager->menuWidthScrollbar + geoManager->menuSpace + radius, geoManager->menuContentHeight), Theme.Color(clrMenuScrollBarBase));
//Upper and lower Corner Square
- pixmapContent->DrawRectangle(cRect(contentWidthFull - radius, 0, radius, radius), Theme.Color(clrMenuBack));
- pixmapContent->DrawRectangle(cRect(contentWidthFull - radius, contentHeight - radius, radius, radius), Theme.Color(clrMenuBack));
+ pixmapContent->DrawRectangle(cRect(geoManager->menuContentWidthFull - radius, 0, radius, radius), Theme.Color(clrMenuBack));
+ pixmapContent->DrawRectangle(cRect(geoManager->menuContentWidthFull - radius, geoManager->menuContentHeight - radius, radius, radius), Theme.Color(clrMenuBack));
//Upper line
- pixmapContent->DrawRectangle(cRect(contentWidthFull, 0, osdWidth - contentWidthMinimum, borderWidth), Theme.Color(clrMenuBorder));
+ pixmapContent->DrawRectangle(cRect(geoManager->menuContentWidthFull, 0, geoManager->osdWidth - geoManager->menuContentWidthMinimum, borderWidth), Theme.Color(clrMenuBorder));
//Lower Line
- pixmapContent->DrawRectangle(cRect(contentWidthFull, contentHeight - borderWidth, osdWidth - contentWidthMinimum, borderWidth), Theme.Color(clrMenuBorder));
+ pixmapContent->DrawRectangle(cRect(geoManager->menuContentWidthFull, geoManager->menuContentHeight - borderWidth, geoManager->osdWidth - geoManager->menuContentWidthMinimum, borderWidth), Theme.Color(clrMenuBorder));
//Vertical line
- pixmapContent->DrawRectangle(cRect(contentWidthFull-radius, radius, borderWidth, contentHeight - 2*radius), Theme.Color(clrMenuBorder));
- //Upper Ellipse
- pixmapContent->DrawEllipse(cRect(contentWidthFull - radius, 0, radius, radius), Theme.Color(clrMenuBorder),2);
- pixmapContent->DrawEllipse(cRect(contentWidthFull - radius + borderWidth, borderWidth, radius-borderWidth, radius-borderWidth), clrTransparent, 2);
- //Lower Ellipse
- pixmapContent->DrawEllipse(cRect(contentWidthFull - radius, contentHeight - radius, radius, radius), Theme.Color(clrMenuBorder),3);
- pixmapContent->DrawEllipse(cRect(contentWidthFull - radius + borderWidth, contentHeight - radius, radius-borderWidth, radius-borderWidth), clrTransparent, 3);
+ pixmapContent->DrawRectangle(cRect(geoManager->menuContentWidthFull-radius, radius, borderWidth, geoManager->menuContentHeight - 2*radius), Theme.Color(clrMenuBorder));
+ if (radius-borderWidth > 2) {
+ //Upper Ellipse
+ pixmapContent->DrawEllipse(cRect(geoManager->menuContentWidthFull - radius, 0, radius, radius), Theme.Color(clrMenuBorder),2);
+ pixmapContent->DrawEllipse(cRect(geoManager->menuContentWidthFull - radius + borderWidth, borderWidth, radius-borderWidth, radius-borderWidth), Theme.Color(clrMenuScrollBarBase), 2);
+ //Lower Ellipse
+ pixmapContent->DrawEllipse(cRect(geoManager->menuContentWidthFull - radius, geoManager->menuContentHeight - radius, radius, radius), Theme.Color(clrMenuBorder),3);
+ pixmapContent->DrawEllipse(cRect(geoManager->menuContentWidthFull - radius + borderWidth, geoManager->menuContentHeight - radius, radius-borderWidth, radius-borderWidth), Theme.Color(clrMenuScrollBarBase), 3);
+ }
} else {
//Background
- pixmapContent->DrawRectangle(cRect(osdWidth - contentWidthMinimum + radius, 0, contentWidthFull - radius, contentHeight), Theme.Color(clrMenuBack));
+ pixmapContent->DrawRectangle(cRect(geoManager->osdWidth - geoManager->menuContentWidthMinimum + radius, 0, geoManager->menuContentWidthFull - radius, geoManager->menuContentHeight), Theme.Color(clrMenuBack));
+ pixmapContent->DrawRectangle(cRect(0, 0, geoManager->menuWidthScrollbar + geoManager->menuSpace + radius, geoManager->menuContentHeight), Theme.Color(clrMenuScrollBarBase));
//Upper and lower Corner Square
- pixmapContent->DrawRectangle(cRect(osdWidth - contentWidthMinimum, 0, radius, radius), Theme.Color(clrMenuBack));
- pixmapContent->DrawRectangle(cRect(osdWidth - contentWidthMinimum, contentHeight - radius, radius, radius), Theme.Color(clrMenuBack));
+ pixmapContent->DrawRectangle(cRect(geoManager->osdWidth - geoManager->menuContentWidthMinimum, 0, radius, radius), Theme.Color(clrMenuBack));
+ pixmapContent->DrawRectangle(cRect(geoManager->osdWidth - geoManager->menuContentWidthMinimum, geoManager->menuContentHeight - radius, radius, radius), Theme.Color(clrMenuBack));
//Upper line
- pixmapContent->DrawRectangle(cRect(0, 0, osdWidth - contentWidthMinimum, borderWidth), Theme.Color(clrMenuBorder));
+ pixmapContent->DrawRectangle(cRect(0, 0, geoManager->osdWidth - geoManager->menuContentWidthMinimum, borderWidth), Theme.Color(clrMenuBorder));
//Lower Line
- pixmapContent->DrawRectangle(cRect(0, contentHeight - borderWidth, osdWidth - contentWidthMinimum, borderWidth), Theme.Color(clrMenuBorder));
+ pixmapContent->DrawRectangle(cRect(0, geoManager->menuContentHeight - borderWidth, geoManager->osdWidth - geoManager->menuContentWidthMinimum, borderWidth), Theme.Color(clrMenuBorder));
//Vertical line
- pixmapContent->DrawRectangle(cRect(osdWidth - contentWidthMinimum + radius - borderWidth, radius, borderWidth, contentHeight - 2*radius), Theme.Color(clrMenuBorder));
- //Upper Ellipse
- pixmapContent->DrawEllipse(cRect(osdWidth - contentWidthMinimum, 0, radius, radius), Theme.Color(clrMenuBorder),1);
- pixmapContent->DrawEllipse(cRect(osdWidth - contentWidthMinimum, borderWidth, radius-borderWidth, radius-borderWidth), clrTransparent, 1);
- //Lower Ellipse
- pixmapContent->DrawEllipse(cRect(osdWidth - contentWidthMinimum, contentHeight - radius, radius, radius), Theme.Color(clrMenuBorder),4);
- pixmapContent->DrawEllipse(cRect(osdWidth - contentWidthMinimum, contentHeight - radius, radius-borderWidth, radius-borderWidth), clrTransparent, 4);
+ pixmapContent->DrawRectangle(cRect(geoManager->osdWidth - geoManager->menuContentWidthMinimum + radius - borderWidth, radius, borderWidth, geoManager->menuContentHeight - 2*radius), Theme.Color(clrMenuBorder));
+ if (radius-borderWidth > 2) {
+ //Upper Ellipse
+ pixmapContent->DrawEllipse(cRect(geoManager->osdWidth - geoManager->menuContentWidthMinimum, 0, radius, radius), Theme.Color(clrMenuBorder),1);
+ pixmapContent->DrawEllipse(cRect(geoManager->osdWidth - geoManager->menuContentWidthMinimum, borderWidth, radius-borderWidth, radius-borderWidth), Theme.Color(clrMenuScrollBarBase), 1);
+ //Lower Ellipse
+ pixmapContent->DrawEllipse(cRect(geoManager->osdWidth - geoManager->menuContentWidthMinimum, geoManager->menuContentHeight - radius, radius, radius), Theme.Color(clrMenuBorder),4);
+ pixmapContent->DrawEllipse(cRect(geoManager->osdWidth - geoManager->menuContentWidthMinimum, geoManager->menuContentHeight - radius, radius-borderWidth, radius-borderWidth), Theme.Color(clrMenuScrollBarBase), 4);
+ }
}
}
@@ -487,40 +379,42 @@ void cNopacityDisplayMenuView::AdjustContentBackground(eMenuCategory menuCat, eM
int contentWidthLast = GetContentWidth(menuCatLast);
int drawportX;
if ((contentWidth != contentWidthLast)||(menuCatLast == mcUndefined)) {
- if (contentWidth == contentWidthFull) {
- drawportX = (config.menuAdjustLeft)?0:(contentWidthMinimum - contentWidthFull);
+ if (contentWidth == geoManager->menuContentWidthFull) {
+ drawportX = (config.GetValue("menuAdjustLeft"))?0:(geoManager->menuContentWidthMinimum - geoManager->menuContentWidthFull);
pixmapContent->SetDrawPortPoint(cPoint(drawportX, 0));
- if (config.scalePicture) {
+ if (config.GetValue("scalePicture")) {
// ask output device to restore full size
vidWin = cDevice::PrimaryDevice()->CanScaleVideo(cRect::Null);
}
} else {
- drawportX = (config.menuAdjustLeft)?(contentWidth - contentWidthFull):(contentWidthMinimum - contentWidth);
+ drawportX = (config.GetValue("menuAdjustLeft"))?(contentWidth - geoManager->menuContentWidthFull):(geoManager->menuContentWidthMinimum - contentWidth);
pixmapContent->SetDrawPortPoint(cPoint(drawportX, 0));
- if (config.scalePicture) {
+ if (config.GetValue("scalePicture")) {
// ask output device to scale down
- int windowX = (config.menuAdjustLeft)?(osdLeft + contentWidth + widthScrollbar + 2 * spaceMenu)
- :(osdLeft + 2 * spaceMenu);
+ int windowX = (config.GetValue("menuAdjustLeft"))?(geoManager->osdLeft + contentWidth + geoManager->menuWidthScrollbar + 2 * geoManager->menuSpace)
+ :(geoManager->osdLeft + 2 * geoManager->menuSpace);
cRect availableRect(
windowX,
- osdTop + headerHeight,
- contentWidthFull - osdLeft - contentWidth - widthScrollbar - 4 * spaceMenu,
- contentHeight);
+ geoManager->osdTop + geoManager->menuHeaderHeight,
+ geoManager->menuContentWidthFull - geoManager->osdLeft - contentWidth - geoManager->menuWidthScrollbar - 4 * geoManager->menuSpace,
+ geoManager->menuContentHeight);
vidWin = cDevice::PrimaryDevice()->CanScaleVideo(availableRect);
}
}
}
osd->DestroyPixmap(pixmapScrollbar);
- int scrollbarX = (config.menuAdjustLeft)?(contentWidth):(osdWidth - contentWidth - widthScrollbar);
- pixmapScrollbar = osd->CreatePixmap(2, cRect(scrollbarX , headerHeight + spaceMenu, widthScrollbar, osdHeight - headerHeight - footerHeight - 2*spaceMenu));
+ osd->DestroyPixmap(pixmapScrollbarBack);
+ int scrollbarX = (config.GetValue("menuAdjustLeft"))?(contentWidth):(geoManager->osdWidth - contentWidth - geoManager->menuWidthScrollbar);
+ pixmapScrollbar = osd->CreatePixmap(3, cRect(scrollbarX , geoManager->menuHeaderHeight + geoManager->menuSpace, geoManager->menuWidthScrollbar, geoManager->menuContentHeight - 2*geoManager->menuSpace));
+ pixmapScrollbarBack = osd->CreatePixmap(2, cRect(scrollbarX , geoManager->menuHeaderHeight + geoManager->menuSpace, geoManager->menuWidthScrollbar, geoManager->menuContentHeight - 2*geoManager->menuSpace));
pixmapScrollbar->Fill(clrTransparent);
+ pixmapScrollbarBack->Fill(clrTransparent);
}
void cNopacityDisplayMenuView::DrawHeaderLogo(void) {
- cImageLoader imgLoader;
- if (imgLoader.LoadIcon("skinIcons/vdrlogo", config.menuHeaderLogoWidth, config.menuHeaderLogoHeight)) {
- pixmapHeaderLogo->DrawImage(cPoint(0,0), imgLoader.GetImage());
- }
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/vdrlogo");
+ if (imgIcon)
+ pixmapHeaderLogo->DrawImage(cPoint(0,0), *imgIcon);
}
int cNopacityDisplayMenuView::ShowHeaderLogo(bool show) {
@@ -529,7 +423,7 @@ int cNopacityDisplayMenuView::ShowHeaderLogo(bool show) {
} else {
pixmapHeaderLogo->SetLayer(-1);
}
- return config.menuHeaderLogoWidth + spaceMenu;
+ return geoManager->menuHeaderVDRLogoWidth + geoManager->menuSpace;
}
int cNopacityDisplayMenuView::DrawHeaderIcon(eMenuCategory menuCat) {
@@ -558,16 +452,17 @@ int cNopacityDisplayMenuView::DrawHeaderIcon(eMenuCategory menuCat) {
default:
drawIcon = false;
}
-
+
int left = 0;
if (drawIcon) {
- int iconX = (config.menuAdjustLeft) ? 0 : (osdWidth - config.headerIconHeight);
- pixmapHeaderIcon = osd->CreatePixmap(2, cRect(iconX, 0, config.headerIconHeight, config.headerIconHeight));
+ int iconSize = geoManager->menuHeaderHeight - 4;
+ int iconX = (config.GetValue("menuAdjustLeft")) ? 0 : (geoManager->osdWidth - geoManager->menuHeaderHeight);
+ pixmapHeaderIcon = osd->CreatePixmap(2, cRect(iconX, 2, iconSize, iconSize));
pixmapHeaderIcon->Fill(clrTransparent);
- cImageLoader imgLoader;
- if (imgLoader.LoadIcon(*icon, config.headerIconHeight)) {
- pixmapHeaderIcon->DrawImage(cPoint(0,0), imgLoader.GetImage());
- left = config.headerIconHeight + spaceMenu;
+ cImage *imgIcon = imgCache->GetSkinIcon(*icon);
+ if (imgIcon) {
+ pixmapHeaderIcon->DrawImage(cPoint(0,0), *imgIcon);
+ left = geoManager->menuHeaderHeight + geoManager->menuSpace;
}
}
return left;
@@ -575,8 +470,14 @@ int cNopacityDisplayMenuView::DrawHeaderIcon(eMenuCategory menuCat) {
int cNopacityDisplayMenuView::ShowHeaderIconChannelLogo(const char *Title) {
int left = 0;
- int iconX = (config.menuAdjustLeft) ? 0 : (osdWidth - config.menuItemLogoWidth);
- pixmapHeaderIcon = osd->CreatePixmap(2, cRect(iconX, 0, config.menuItemLogoWidth, config.menuItemLogoHeight));
+ int logoHeight = geoManager->menuHeaderHeight - 4;
+ cSize logoSize = ScaleToFit(1000,
+ logoHeight,
+ config.GetValue("logoWidth"),
+ config.GetValue("logoHeight"));
+ int logoWidth = logoSize.Width();
+ int iconX = (config.GetValue("menuAdjustLeft")) ? 0 : (geoManager->osdWidth - logoWidth);
+ pixmapHeaderIcon = osd->CreatePixmap(2, cRect(iconX, 2, logoWidth, logoHeight));
pixmapHeaderIcon->Fill(clrTransparent);
std::string channel = Title;
if (channel.length() == 0)
@@ -587,9 +488,9 @@ int cNopacityDisplayMenuView::ShowHeaderIconChannelLogo(const char *Title) {
channel.erase(0, remove.length());
} catch (...) {}
cImageLoader imgLoader;
- if (imgLoader.LoadLogo(channel.c_str(), config.menuItemLogoWidth, config.menuItemLogoHeight)) {
+ if (imgLoader.LoadLogo(channel.c_str(), logoWidth, logoHeight)) {
pixmapHeaderIcon->DrawImage(cPoint(0, 0), imgLoader.GetImage());
- left = config.menuItemLogoWidth + spaceMenu;
+ left = logoWidth + geoManager->menuSpace;
}
return left;
}
@@ -603,44 +504,51 @@ void cNopacityDisplayMenuView::DestroyHeaderIcon(void) {
void cNopacityDisplayMenuView::DrawHeaderLabel(int left, cString label) {
pixmapHeaderLabel->Fill(clrTransparent);
- int labelW = fontHeader->Width(label);
- int labelX = (config.menuAdjustLeft) ? (left) : (osdWidth - dateWidth - labelW - left - 2*spaceMenu);
- pixmapHeaderLabel->DrawText(cPoint(labelX, ((headerHeight - 10) - fontHeader->Height()) / 2), *label, Theme.Color(clrMenuFontHeader), clrTransparent, fontHeader);
+ int labelW = fontManager->menuHeader->Width(label);
+ int labelX = (config.GetValue("menuAdjustLeft")) ? (left)
+ : (geoManager->osdWidth - geoManager->menuDateWidth - labelW - left - 2*geoManager->menuSpace);
+ int labelY = (geoManager->menuHeaderHeight - fontManager->menuHeader->Height())/2;
+ pixmapHeaderLabel->DrawText(cPoint(labelX, labelY),
+ *label,
+ Theme.Color(clrMenuFontHeader),
+ clrTransparent,
+ fontManager->menuHeader);
}
void cNopacityDisplayMenuView::DrawDate(bool initial) {
cString date = DayDateTime();
if (initial || strcmp(date, lastDate)) {
pixmapDate->Fill(clrTransparent);
- int dateW = fontDate->Width(date);
- int dateX = (config.menuAdjustLeft) ? (dateWidth - dateW - 2*spaceMenu) : (spaceMenu);
- pixmapDate->DrawText(cPoint(dateX, (headerHeight - fontDate->Height()) / 2), date, Theme.Color(clrMenuFontDate), clrTransparent, fontDate);
+ int dateW = fontManager->menuDate->Width(date);
+ int dateX = (config.GetValue("menuAdjustLeft")) ? (geoManager->menuDateWidth - dateW - 2*geoManager->menuSpace) : (geoManager->menuSpace);
+ pixmapDate->DrawText(cPoint(dateX, (geoManager->menuHeaderHeight - fontManager->menuDate->Height()) / 2), date, Theme.Color(clrMenuFontDate), clrTransparent, fontManager->menuDate);
lastDate = date;
}
}
void cNopacityDisplayMenuView::DrawDiskUsage(void) {
- int iconWidth = diskUsageWidth * 3/4;
+ int iconWidth = geoManager->menuDiskUsageWidth * 3/4;
int DiskUsage = cVideoDiskUsage::UsedPercent();
bool DiskAlert = DiskUsage > diskUsageAlert;
tColor bgColor = DiskAlert ? Theme.Color(clrDiskAlert) : Theme.Color(clrMenuBack);
pixmapDiskUsage->Fill(Theme.Color(clrMenuBorder));
- pixmapDiskUsage->DrawRectangle(cRect(2,2,diskUsageWidth-4, diskUsageHeight-4), bgColor);
- cImageLoader imgLoader;
- if (imgLoader.LoadIcon("skinIcons/DiskUsage", iconWidth)) {
- cImage icon = imgLoader.GetImage();
- pixmapDiskUsageIcon->DrawImage(cPoint((diskUsageWidth - iconWidth)/2,0), icon);
- }
- if (imgLoader.LoadIcon("skinIcons/discpercent", diskUsageWidth - 4, diskUsageHeight/5, false)) {
- cImage icon = imgLoader.GetImage();
- pixmapDiskUsageIcon->DrawImage(cPoint(0,4*diskUsageHeight/5), icon);
- }
+ pixmapDiskUsage->DrawRectangle(cRect(2,2,geoManager->menuDiskUsageWidth-4, geoManager->menuDiskUsageHeight-4), bgColor);
+ cImage *imgDisc = imgCache->GetSkinIcon("skinIcons/DiskUsage");
+ if (imgDisc)
+ pixmapDiskUsageIcon->DrawImage(cPoint((geoManager->menuDiskUsageWidth - iconWidth)/2,0), *imgDisc);
+ cImage *imgDiscPerc = imgCache->GetSkinIcon("skinIcons/discpercent");
+ if (imgDiscPerc)
+ pixmapDiskUsageIcon->DrawImage(cPoint(0,4*geoManager->menuDiskUsageHeight/5), *imgDiscPerc);
pixmapDiskUsageLabel->Fill(clrTransparent);
cString usage = cString::sprintf("%d%%", DiskUsage);
- cString rest = cString::sprintf("%02d:%02dh %s", cVideoDiskUsage::FreeMinutes() / 60, cVideoDiskUsage::FreeMinutes() % 60, tr("free"));
- pixmapDiskUsageLabel->DrawRectangle(cRect((diskUsageWidth - 4)*DiskUsage/100,4*diskUsageHeight/5, (diskUsageWidth - 4) - (diskUsageWidth - 4)*DiskUsage/100, diskUsageHeight/5), 0xDD000000);
- pixmapDiskUsageLabel->DrawText(cPoint((diskUsageWidth - fontDiskUsagePercent->Width(*usage))/2, 4*diskUsageHeight/5), *usage, Theme.Color(clrMenuFontDiscUsage), clrTransparent, fontDiskUsagePercent);
- pixmapDiskUsageLabel->DrawText(cPoint((diskUsageWidth - fontDiskUsage->Width(*rest))/2, (diskUsageHeight - fontDiskUsage->Height())/2), *rest, Theme.Color(clrMenuFontDiscUsage), clrTransparent, fontDiskUsage);
+ cString rest;
+ if (config.GetValue("discUsageStyle") == 0)
+ rest = cString::sprintf("%02d:%02dh %s", cVideoDiskUsage::FreeMinutes() / 60, cVideoDiskUsage::FreeMinutes() % 60, tr("free"));
+ else
+ rest = cString::sprintf("%d GB %s", cVideoDiskUsage::FreeMB() / 1024, tr("free"));
+ pixmapDiskUsageLabel->DrawRectangle(cRect((geoManager->menuDiskUsageWidth - 4)*DiskUsage/100,4*geoManager->menuDiskUsageHeight/5, (geoManager->menuDiskUsageWidth - 4) - (geoManager->menuDiskUsageWidth - 4)*DiskUsage/100, geoManager->menuDiskUsageHeight/5), 0xDD000000);
+ pixmapDiskUsageLabel->DrawText(cPoint((geoManager->menuDiskUsageWidth - fontManager->menuDiskUsagePercent->Width(*usage))/2, 4*geoManager->menuDiskUsageHeight/5), *usage, Theme.Color(clrMenuFontDiscUsagePerc), clrTransparent, fontManager->menuDiskUsagePercent);
+ pixmapDiskUsageLabel->DrawText(cPoint((geoManager->menuDiskUsageWidth - fontManager->menuDiskUsage->Width(*rest))/2, (geoManager->menuDiskUsageHeight - fontManager->menuDiskUsage->Height())/2), *rest, Theme.Color(clrMenuFontDiscUsage), clrTransparent, fontManager->menuDiskUsage);
pixmapDiskUsage->SetLayer(2);
pixmapDiskUsageIcon->SetLayer(3);
@@ -659,72 +567,84 @@ void cNopacityDisplayMenuView::ShowDiskUsage(bool show) {
}
}
-void cNopacityDisplayMenuView::DrawButton(const char *text, int handleImage, tColor borderColor, int num) {
+void cNopacityDisplayMenuView::DrawButton(const char *text, eSkinElementType seButton, tColor buttonColor, tColor borderColor, tColor fontColor, int num) {
if (num < 0)
return;
- int top = 2*buttonsBorder;
- int left = num * buttonWidth + (2*num + 1) * buttonsBorder;
- pixmapFooter->DrawRectangle(cRect(left, top, buttonWidth, buttonHeight), borderColor);
- pixmapFooter->DrawImage(cPoint(left+2, top+2), handleImage);
-
- if (config.roundedCorners) {
- int radius = config.cornerRadius;
-
- pixmapFooter->DrawEllipse(cRect(left,top,radius,radius), borderColor, -2);
- pixmapFooter->DrawEllipse(cRect(left-2,top-2,radius,radius), Theme.Color(clrMenuBack), -2);
+ int top = 2*geoManager->menuButtonsBorder;
+ int left = num * geoManager->menuButtonWidth + (2*num + 1) * geoManager->menuButtonsBorder;
+ if (config.GetValue("displayType") == dtBlending) {
+ pixmapFooter->DrawRectangle(cRect(left, top, geoManager->menuButtonWidth, geoManager->menuButtonHeight), borderColor);
+ cImage *back = imgCache->GetSkinElement(seButton);
+ if (back)
+ pixmapFooter->DrawImage(cPoint(left+2, top+2), *back);
+ } else if (config.GetValue("displayType") == dtGraphical) {
+ cImage *image = imgCache->GetSkinElement(seButton);
+ if (image)
+ pixmapFooter->DrawImage(cPoint(left, top), *image);
+ } else {
+ pixmapFooter->DrawRectangle(cRect(left, top, geoManager->menuButtonWidth, geoManager->menuButtonHeight), borderColor);
+ pixmapFooter->DrawRectangle(cRect(left+1, top+1, geoManager->menuButtonWidth-2, geoManager->menuButtonHeight-2), buttonColor);
+ }
+ if (config.GetValue("roundedCorners") && (config.GetValue("displayType") != dtGraphical)) {
+ int radius = config.GetValue("cornerRadius");
+ if (radius > 2) {
+ pixmapFooter->DrawEllipse(cRect(left,top,radius,radius), borderColor, -2);
+ pixmapFooter->DrawEllipse(cRect(left-1,top-1,radius,radius), clrTransparent, -2);
- pixmapFooter->DrawEllipse(cRect(left + buttonWidth -radius, top,radius,radius), borderColor, -1);
- pixmapFooter->DrawEllipse(cRect(left + buttonWidth -radius+2,top-2,radius,radius), Theme.Color(clrMenuBack), -1);
+ pixmapFooter->DrawEllipse(cRect(left + geoManager->menuButtonWidth -radius, top,radius,radius), borderColor, -1);
+ pixmapFooter->DrawEllipse(cRect(left + geoManager->menuButtonWidth -radius+1,top-1,radius,radius), clrTransparent, -1);
- pixmapFooter->DrawEllipse(cRect(left,top + buttonHeight -radius,radius,radius), borderColor, -3);
- pixmapFooter->DrawEllipse(cRect(left - 2, top + buttonHeight - radius + 2,radius,radius), Theme.Color(clrMenuBack), -3);
+ pixmapFooter->DrawEllipse(cRect(left,top + geoManager->menuButtonHeight -radius,radius,radius), borderColor, -3);
+ pixmapFooter->DrawEllipse(cRect(left - 1, top + geoManager->menuButtonHeight - radius + 1,radius,radius), clrTransparent, -3);
- pixmapFooter->DrawEllipse(cRect(left + buttonWidth -radius, top + buttonHeight -radius,radius,radius), borderColor, -4);
- pixmapFooter->DrawEllipse(cRect(left + buttonWidth -radius + 2, top + buttonHeight -radius + 2,radius,radius), Theme.Color(clrMenuBack), -4);
+ pixmapFooter->DrawEllipse(cRect(left + geoManager->menuButtonWidth -radius, top + geoManager->menuButtonHeight -radius,radius,radius), borderColor, -4);
+ pixmapFooter->DrawEllipse(cRect(left + geoManager->menuButtonWidth -radius + 1, top + geoManager->menuButtonHeight -radius + 1,radius,radius), clrTransparent, -4);
+ }
}
-
- int textWidth = fontButtons->Width(text);
- int textHeight = fontButtons->Height();
- pixmapFooter->DrawText(cPoint(left + (buttonWidth-textWidth)/2, top + (buttonHeight-textHeight)/2), text, Theme.Color(clrMenuFontButton), clrTransparent, fontButtons);
+ int textWidth = fontManager->menuButtons->Width(text);
+ int textHeight = fontManager->menuButtons->Height();
+ pixmapButtonsText->DrawRectangle(cRect(left, top, geoManager->menuButtonWidth, geoManager->menuButtonHeight), clrTransparent);
+ pixmapButtonsText->DrawText(cPoint(left + (geoManager->menuButtonWidth-textWidth)/2, top + (geoManager->menuButtonHeight-textHeight)/2), text, fontColor, clrTransparent, fontManager->menuButtons);
}
void cNopacityDisplayMenuView::ClearButton(int num) {
if (num < 0)
return;
- int top = 2*buttonsBorder;
- int left = num * buttonWidth + (2*num + 1) * buttonsBorder;
- pixmapFooter->DrawRectangle(cRect(left, top, buttonWidth, buttonHeight), Theme.Color(clrMenuBack));
+ int top = 2*geoManager->menuButtonsBorder;
+ int left = num * geoManager->menuButtonWidth + (2*num + 1) * geoManager->menuButtonsBorder;
+ pixmapFooter->DrawRectangle(cRect(left, top, geoManager->menuButtonWidth, geoManager->menuButtonHeight), clrTransparent);
+ pixmapButtonsText->DrawRectangle(cRect(left, top, geoManager->menuButtonWidth, geoManager->menuButtonHeight), clrTransparent);
}
int cNopacityDisplayMenuView::GetTimersInitHeight(void) {
- int initHeight = headerHeight + 2*spaceMenu;
- if (config.showDiscUsage)
- initHeight += diskUsageHeight;
+ int initHeight = geoManager->menuHeaderHeight + 2*geoManager->menuSpace;
+ if (config.GetValue("showDiscUsage"))
+ initHeight += geoManager->menuDiskUsageHeight;
return initHeight;
}
int cNopacityDisplayMenuView::GetTimersMaxHeight(void) {
- return headerHeight + contentHeight;
+ return geoManager->menuHeaderHeight + geoManager->menuContentHeight;
}
cNopacityTimer *cNopacityDisplayMenuView::DrawTimerConflict(int numConflicts, int y) {
- cNopacityTimer *t = new cNopacityTimer(osd, numConflicts, fontTimers, fontTimersHead);
- t->SetGeometry(timersWidth, y);
+ cNopacityTimer *t = new cNopacityTimer(osd, imgCache, numConflicts, fontManager->menuTimers, fontManager->menuTimersHead);
+ t->SetGeometry(geoManager->menuTimersWidth, y);
t->CreateConflictText();
- t->CalculateHeight(spaceMenu);
- int timerX = (config.menuAdjustLeft) ? (osdWidth - timersWidth - 10) : 10;
+ t->CalculateHeight(geoManager->menuSpace);
+ int timerX = (config.GetValue("menuAdjustLeft")) ? (geoManager->osdWidth - geoManager->menuTimersWidth - 10) : 10;
t->CreatePixmaps(timerX);
t->Render();
return t;
}
cNopacityTimer *cNopacityDisplayMenuView::DrawTimer(const cTimer *Timer, int y) {
- cNopacityTimer *t = new cNopacityTimer(osd, Timer, fontTimers, fontTimersHead);
- t->SetGeometry(timersWidth, y);
+ cNopacityTimer *t = new cNopacityTimer(osd, imgCache, Timer, fontManager->menuTimers, fontManager->menuTimersHead);
+ t->SetGeometry(geoManager->menuTimersWidth, y);
t->CreateDate();
t->CreateShowName();
- t->CalculateHeight(spaceMenu);
- int timerX = (config.menuAdjustLeft) ? (osdWidth - timersWidth - 10) : 10;
+ t->CalculateHeight(geoManager->menuSpace);
+ int timerX = (config.GetValue("menuAdjustLeft")) ? (geoManager->osdWidth - geoManager->menuTimersWidth - 10) : 10;
t->CreatePixmaps(timerX);
t->Render();
return t;
@@ -734,42 +654,79 @@ void cNopacityDisplayMenuView::DrawScrollbar(double Height, double Offset) {
int totalHeight = pixmapScrollbar->ViewPort().Height() - 6;
int height = Height * totalHeight;
int offset = Offset * totalHeight;
- pixmapScrollbar->Fill(Theme.Color(clrMenuScrollBar));
- pixmapScrollbar->DrawRectangle(cRect(2,2,widthScrollbar-4,totalHeight+2), Theme.Color(clrMenuScrollBarBack));
- pixmapScrollbar->DrawRectangle(cRect(3,3 + offset,widthScrollbar-6,height), Theme.Color(clrMenuScrollBar));
+ if (config.GetValue("displayType") == dtGraphical) {
+ cImage *image = imgCache->GetSkinElement(seScrollbar);
+ if (image)
+ pixmapScrollbarBack->DrawImage(cPoint(0, 0), *image);
+ } else {
+ pixmapScrollbarBack->Fill(Theme.Color(clrMenuScrollBar));
+ pixmapScrollbarBack->DrawRectangle(cRect(2,2,geoManager->menuWidthScrollbar-4,totalHeight+2), Theme.Color(clrMenuScrollBarBack));
+ }
+ pixmapScrollbar->Fill(clrTransparent);
+ pixmapScrollbar->DrawRectangle(cRect(3,3 + offset,geoManager->menuWidthScrollbar-6,height), Theme.Color(clrMenuScrollBar));
}
void cNopacityDisplayMenuView::ClearScrollbar(void) {
pixmapScrollbar->Fill(clrTransparent);
+ pixmapScrollbarBack->Fill(clrTransparent);
}
void cNopacityDisplayMenuView::DrawMessage(eMessageType Type, const char *Text) {
tColor col = Theme.Color(clrMessageStatus);
+ tColor colFont = Theme.Color(clrMessageFontStatus);
+ eSkinElementType seType = seMessageMenuStatus;
switch (Type) {
- case mtStatus:
+ case mtStatus:
col = Theme.Color(clrMessageStatus);
+ colFont = Theme.Color(clrMessageFontStatus);
+ seType = seMessageMenuStatus;
break;
case mtInfo:
col = Theme.Color(clrMessageInfo);
+ colFont = Theme.Color(clrMessageFontInfo);
+ seType = seMessageMenuInfo;
break;
case mtWarning:
col = Theme.Color(clrMessageWarning);
+ colFont = Theme.Color(clrMessageFontWarning);
+ seType = seMessageMenuWarning;
break;
case mtError:
col = Theme.Color(clrMessageError);
+ colFont = Theme.Color(clrMessageFontError);
+ seType = seMessageMenuError;
break;
}
if (pixmapStatus) {
ClearMessage();
}
- pixmapStatus = osd->CreatePixmap(5, cRect(0.1*osdWidth, 0.8*osdHeight, messageWidth, messageHeight));
- pixmapStatus->Fill(col);
- cImageLoader imgLoader;
- imgLoader.DrawBackground2(Theme.Color(clrMenuBack), col, messageWidth-2, messageHeight-2);
- pixmapStatus->DrawImage(cPoint(1, 1), imgLoader.GetImage());
- int textWidth = fontMessage->Width(Text);
- pixmapStatus->DrawText(cPoint((messageWidth - textWidth) / 2, (messageHeight - fontMessage->Height()) / 2), Text, Theme.Color(clrMenuFontMessages), clrTransparent, fontMessage);
+ pixmapStatus = osd->CreatePixmap(7, cRect(0.1*geoManager->osdWidth, 0.8*geoManager->osdHeight, geoManager->menuMessageWidth, geoManager->menuMessageHeight));
+
+ pixmapStatus->Fill(clrTransparent);
+ if (config.GetValue("displayType") == dtGraphical) {
+ cImage *imgBack = imgCache->GetSkinElement(seType);
+ if (imgBack) {
+ pixmapStatus->DrawImage(cPoint(0, 0), *imgBack);
+ }
+ } else {
+ pixmapStatus->Fill(col);
+ if (config.GetValue("displayType") == dtBlending) {
+ cImage imgBack = imgCache->GetBackground(Theme.Color(clrMenuBack), col, geoManager->menuMessageWidth-2, geoManager->menuMessageHeight-2, true);
+ pixmapStatus->DrawImage(cPoint(1, 1), imgBack);
+ }
+ if (config.GetValue("roundedCorners")) {
+ DrawRoundedCornersWithBorder(pixmapStatus, col, config.GetValue("cornerRadius"), geoManager->menuMessageWidth, geoManager->menuMessageHeight);
+ }
+ }
+ int textWidth = fontManager->menuMessage->Width(Text);
+ tColor clrFontBack = (config.GetValue("displayType") != dtFlat)?(clrTransparent):col;
+ pixmapStatus->DrawText(cPoint((geoManager->menuMessageWidth - textWidth) / 2,
+ (geoManager->menuMessageHeight - fontManager->menuMessage->Height()) / 2),
+ Text,
+ colFont,
+ clrFontBack,
+ fontManager->menuMessage);
}
void cNopacityDisplayMenuView::ClearMessage(void) {
@@ -779,29 +736,33 @@ void cNopacityDisplayMenuView::ClearMessage(void) {
}
}
-void cNopacityDisplayMenuView::SetDetailViewSize(eDetailViewType detailViewType, cNopacityMenuDetailView *detailView) {
- int x = (config.menuAdjustLeft) ? 0 : osdWidth - contentWidthFull + 2*spaceMenu;
+void cNopacityDisplayMenuView::SetDetailViewSize(eDetailViewType detailViewType, cNopacityDetailView *detailView) {
+ int x = (config.GetValue("menuAdjustLeft")) ? 0 : geoManager->osdWidth - geoManager->menuContentWidthFull + 2*geoManager->menuSpace;
int width = 0;
int height = 0;
int top = 0;
- int contentBorder = 20;
+ int contentBorder = 30;
int detailHeaderHeight = 0;
-
+
+ width = geoManager->menuContentWidthFull - 2*geoManager->menuSpace;
+ height = geoManager->menuContentHeight;
+ top = geoManager->menuHeaderHeight;
+
switch (detailViewType) {
case dvEvent:
- detailHeaderHeight = max(config.detailViewLogoHeight, config.epgImageHeight)+4;
+ detailHeaderHeight = config.GetValue("headerDetailedEPG") * height / 100;
+ contentBorder = config.GetValue("borderDetailedEPG");
break;
case dvRecording:
- detailHeaderHeight = config.epgImageHeight + 4;
+ detailHeaderHeight = config.GetValue("headerDetailedRecordings") * height / 100;
+ contentBorder = config.GetValue("borderDetailedRecordings");
break;
case dvText:
- detailHeaderHeight = 0;
+ detailHeaderHeight = 0;
break;
default:
break;
}
- width = contentWidthFull - 2*spaceMenu;
- height = contentHeight;
- top = headerHeight;
detailView->SetGeometry(x, width, height, top, contentBorder, detailHeaderHeight);
-}
+ detailView->SetScrollBar(pixmapScrollbar, pixmapScrollbarBack);
+}
\ No newline at end of file
diff --git a/displaymenuview.h b/displaymenuview.h
index 63af3c8..974bab7 100644
--- a/displaymenuview.h
+++ b/displaymenuview.h
@@ -1,97 +1,61 @@
#ifndef __NOPACITY_DISPLAYMENUVIEW_H
#define __NOPACITY_DISPLAYMENUVIEW_H
-enum eDetailViewType {dvEvent = 0, dvRecording, dvText};
+#include "timers.h"
+#include "menudetailview.h"
+#include <vdr/skins.h>
+#include <vdr/videodir.h>
+#include "config.h"
+#include "helpers.h"
+#include "imageloader.h"
class cNopacityDisplayMenuView {
private:
cOsd *osd;
+ cImageCache *imgCache;
cString lastDate;
int diskUsageAlert;
cPixmap *pixmapHeader;
+ cPixmap *pixmapHeaderForeground;
cPixmap *pixmapHeaderLogo;
cPixmap *pixmapHeaderIcon;
cPixmap *pixmapHeaderLabel;
cPixmap *pixmapDate;
cPixmap *pixmapFooter;
+ cPixmap *pixmapFooterBack;
+ cPixmap *pixmapButtonsText;
cPixmap *pixmapContent;
- cPixmap *pixmapScrollbar;
+ cPixmap *pixmapScrollbar;
+ cPixmap *pixmapScrollbarBack;
cPixmap *pixmapDiskUsage;
cPixmap *pixmapDiskUsageIcon;
cPixmap *pixmapDiskUsageLabel;
cPixmap *pixmapStatus;
- cFont *fontHeader;
- cFont *fontDate;
- cFont *fontMenuitemLarge;
- cFont *fontMenuitemSchedule;
- cFont *fontMenuitemScheduleSmall;
- cFont *fontMenuitemChannel;
- cFont *fontMenuitemChannelSmall;
- cFont *fontMenuitemRecordings;
- cFont *fontMenuitemRecordingsSmall;
- cFont *fontMenuitemTimers;
- cFont *fontMenuitemTimersSmall;
- cFont *fontMenuitemDefault;
- cFont *fontDiskUsage;
- cFont *fontDiskUsagePercent;
- cFont *fontTimers;
- cFont *fontTimersHead;
- cFont *fontButtons;
- cFont *fontMessage;
- cFont *fontEPGInfoWindow;
- int osdWidth, osdHeight;
- int osdLeft, osdTop;
- int widthScrollbar;
- int dateWidth;
- int headerHeight, footerHeight, contentHeight;
- int contentWidthFull;
- int contentWidthMain;
- int contentWidthSchedules;
- int contentWidthChannels;
- int contentWidthTimers;
- int contentWidthRecordings;
- int contentWidthSetup;
- int contentWidthMinimum;
- int menuItemWidthDefault, menuItemHeightDefault;
- int menuItemWidthMain, menuItemHeightMain;
- int menuItemWidthSchedule, menuItemHeightSchedule;
- int menuItemWidthChannel;
- int menuItemWidthTimer;
- int menuItemWidthRecording, menuItemHeightRecordings;
- int menuItemWidthSetup;
- int diskUsageWidth, diskUsageHeight;
- int timersWidth;
- int buttonsBorder, buttonWidth, buttonHeight;
- int messageWidth, messageHeight;
+ int feedNameLength;
int avrgFontWidth;
cRect textWindowSizeSchedules;
cRect textWindowSizeRecordings;
- void SetDescriptionTextWindowSize(void);
+ cRect textWindowSizeChannels;
+ cRect textWindowSizeTimers;
int GetContentWidth(eMenuCategory menuCat);
public:
- cNopacityDisplayMenuView();
+ cNopacityDisplayMenuView(cImageCache *imgCache);
virtual ~cNopacityDisplayMenuView(void);
cOsd *createOsd(void);
- void SetGeometry(void);
+ void SetDescriptionTextWindowSize(void);
void CreatePixmaps(void);
void SetPixmapAlpha(int Alpha);
- void CreateFonts(void);
- cFont *GetMenuItemFont(eMenuCategory menuCat);
- cFont *GetMenuItemFontSmall(eMenuCategory menuCat);
- cFont *GetEPGWindowFont(void);
void GetMenuItemSize(eMenuCategory menuCat, cPoint *itemSize);
- int GetMaxItems(eMenuCategory menuCat);
int GetMenuTop(int numItems, int itemHeight);
int GetMenuItemLeft(int itemWidth);
void SetAvrgFontWidth(void);
int mytabs[cSkinDisplayMenu::MaxTabs];
void SetTabs(int Tab1, int Tab2 = 0, int Tab3 = 0, int Tab4 = 0, int Tab5 = 0);
int GetEditableWidth(void);
- int GetWidthDefaultMenu(void) {return menuItemWidthDefault;};
+ int GetWidthDefaultMenu(void) {return geoManager->menuItemWidthDefault;};
int GetTextAreaWidth(void);
const cFont *GetTextAreaFont(bool FixedFont);
cRect *GetDescriptionTextWindowSize(eMenuCategory menuCat);
- void CreateBackgroundImages(int *handleBackgrounds, int *handleButtons);
void AdjustContentBackground(eMenuCategory menuCat, eMenuCategory menuCatLast, cRect & vidWin);
void DrawBorderDecoration(void);
int ShowHeaderLogo(bool show);
@@ -103,7 +67,7 @@ class cNopacityDisplayMenuView {
void DrawDate(bool initial);
void DrawDiskUsage(void);
void ShowDiskUsage(bool show);
- void DrawButton(const char *text, int handleImage, tColor borderColor, int num);
+ void DrawButton(const char *text, eSkinElementType seButton, tColor buttonColor, tColor borderColor, tColor fontColor, int num);
void ClearButton(int num);
int GetTimersInitHeight(void);
int GetTimersMaxHeight(void);
@@ -113,8 +77,7 @@ class cNopacityDisplayMenuView {
void ClearScrollbar(void);
void DrawMessage(eMessageType Type, const char *Text);
void ClearMessage(void);
- void SetDetailViewSize(eDetailViewType detailViewType, cNopacityMenuDetailView *detailView);
- int spaceMenu;
+ void SetDetailViewSize(eDetailViewType detailViewType, cNopacityDetailView *detailView);
};
diff --git a/displaymessage.c b/displaymessage.c
index 4b5fb47..f2c9c65 100644
--- a/displaymessage.c
+++ b/displaymessage.c
@@ -1,18 +1,21 @@
#include "displaymessage.h"
+#include "config.h"
+#include "imageloader.h"
+#include "helpers.h"
-cNopacityDisplayMessage::cNopacityDisplayMessage(void) {
- config.setDynamicValues();
- height = cOsd::OsdHeight() * config.messageHeight / 100;
- int top = cOsd::OsdTop() + cOsd::OsdHeight() - height - config.messageBorderBottom;
- width = cOsd::OsdWidth() * config.messageWidth / 100;
- int left = (cOsd::OsdLeft() + cOsd::OsdWidth() - width) / 2;
- osd = CreateOsd(left, top, width, height);
- pixmap = osd->CreatePixmap(1, cRect(0, 0, width, height));
- if (config.messageFadeTime)
+cNopacityDisplayMessage::cNopacityDisplayMessage(cImageCache *imgCache) {
+ this->imgCache = imgCache;
+ FadeTime = config.GetValue("messageFadeTime");
+ FrameTime = FadeTime / 10;
+ int top = geoManager->osdTop + geoManager->osdHeight - geoManager->messageHeight - config.GetValue("messageBorderBottom");
+ int left = geoManager->osdLeft + (geoManager->osdWidth - geoManager->messageWidth) / 2;
+ osd = CreateOsd(left, top, geoManager->messageWidth, geoManager->messageHeight);
+ pixmap = osd->CreatePixmap(2, cRect(0, 0, geoManager->messageWidth, geoManager->messageHeight));
+ pixmapBackground = osd->CreatePixmap(1, cRect(0, 0, geoManager->messageWidth, geoManager->messageHeight));
+ if (FadeTime) {
pixmap->SetAlpha(0);
- font = cFont::CreateFont(config.fontName, height / 4 + 15 + config.fontMessage);
- FrameTime = config.messageFrameTime;
- FadeTime = config.messageFadeTime;
+ pixmapBackground->SetAlpha(0);
+ }
}
cNopacityDisplayMessage::~cNopacityDisplayMessage() {
@@ -20,33 +23,62 @@ cNopacityDisplayMessage::~cNopacityDisplayMessage() {
while (Active())
cCondWait::SleepMs(10);
osd->DestroyPixmap(pixmap);
- delete font;
+ osd->DestroyPixmap(pixmapBackground);
delete osd;
}
void cNopacityDisplayMessage::SetMessage(eMessageType Type, const char *Text) {
tColor col = Theme.Color(clrMessageStatus);
+ tColor colFont = Theme.Color(clrMessageFontStatus);
+ eSkinElementType seType = seMessageStatus;
switch (Type) {
- case mtStatus:
+ case mtStatus:
col = Theme.Color(clrMessageStatus);
+ colFont = Theme.Color(clrMessageFontStatus);
+ seType = seMessageStatus;
break;
case mtInfo:
col = Theme.Color(clrMessageInfo);
+ colFont = Theme.Color(clrMessageFontInfo);
+ seType = seMessageInfo;
break;
case mtWarning:
col = Theme.Color(clrMessageWarning);
+ colFont = Theme.Color(clrMessageFontWarning);
+ seType = seMessageWarning;
break;
case mtError:
col = Theme.Color(clrMessageError);
+ colFont = Theme.Color(clrMessageFontError);
+ seType = seMessageError;
break;
}
- pixmap->Fill(col);
- cImageLoader imgLoader;
- imgLoader.DrawBackground2(Theme.Color(clrMessageBlend), col, width-2, height-2);
- pixmap->DrawImage(cPoint(1, 1), imgLoader.GetImage());
- int textWidth = font->Width(Text);
- pixmap->DrawText(cPoint((width - textWidth) / 2, (height - font->Height()) / 2), Text, Theme.Color(clrMessageFont), clrTransparent, font);
- if (config.messageFadeTime)
+
+ pixmap->Fill(clrTransparent);
+ if (config.GetValue("displayType") == dtGraphical) {
+ pixmapBackground->Fill(clrTransparent);
+ cImage *imgBack = imgCache->GetSkinElement(seType);
+ if (imgBack) {
+ pixmapBackground->DrawImage(cPoint(0, 0), *imgBack);
+ }
+ } else {
+ pixmapBackground->Fill(col);
+ if (config.GetValue("displayType") == dtBlending) {
+ cImage imgBack = imgCache->GetBackground(Theme.Color(clrMessageBlend), col, geoManager->messageWidth-2, geoManager->messageHeight-2, true);
+ pixmapBackground->DrawImage(cPoint(1, 1), imgBack);
+ }
+ if (config.GetValue("roundedCorners")) {
+ DrawRoundedCornersWithBorder(pixmapBackground, col, config.GetValue("cornerRadius"), geoManager->messageWidth, geoManager->messageHeight);
+ }
+ }
+ int textWidth = fontManager->messageText->Width(Text);
+ pixmap->DrawText(cPoint((geoManager->messageWidth - textWidth) / 2,
+ (geoManager->messageHeight - fontManager->messageText->Height()) / 2),
+ Text,
+ colFont,
+ clrTransparent,
+ fontManager->messageText);
+ if (FadeTime)
Start();
}
@@ -61,10 +93,11 @@ void cNopacityDisplayMessage::Action(void) {
cPixmap::Lock();
double t = min(double(Now - Start) / FadeTime, 1.0);
int Alpha = t * ALPHA_OPAQUE;
+ pixmapBackground->SetAlpha(Alpha);
pixmap->SetAlpha(Alpha);
+ cPixmap::Unlock();
if (Running())
osd->Flush();
- cPixmap::Unlock();
int Delta = cTimeMs::Now() - Now;
if (Running() && (Delta < FrameTime))
cCondWait::SleepMs(FrameTime - Delta);
diff --git a/displaymessage.h b/displaymessage.h
index b287e33..fc1d5b0 100644
--- a/displaymessage.h
+++ b/displaymessage.h
@@ -1,17 +1,21 @@
#ifndef __NOPACITY_DISPLAYMESSAGE_H
#define __NOPACITY_DISPLAYMESSAGE_H
+
+#include <vdr/thread.h>
+#include <vdr/skins.h>
+#include "imagecache.h"
+
class cNopacityDisplayMessage : public cSkinDisplayMessage , cThread {
private:
cOsd *osd;
- int width;
- int height;
+ cImageCache *imgCache;
cPixmap *pixmap;
- cFont *font;
+ cPixmap *pixmapBackground;
int FrameTime;
int FadeTime;
virtual void Action(void);
public:
- cNopacityDisplayMessage(void);
+ cNopacityDisplayMessage(cImageCache *imgCache);
virtual ~cNopacityDisplayMessage();
virtual void SetMessage(eMessageType Type, const char *Text);
virtual void Flush(void);
diff --git a/displayreplay.c b/displayreplay.c
index b19351b..6e42cea 100644
--- a/displayreplay.c
+++ b/displayreplay.c
@@ -1,17 +1,18 @@
#include "displayreplay.h"
+#include "config.h"
+#include "helpers.h"
+#include "imageloader.h"
-cNopacityDisplayReplay::cNopacityDisplayReplay(bool ModeOnly) {
- config.setDynamicValues();
+cNopacityDisplayReplay::cNopacityDisplayReplay(cImageCache *imgCache, bool ModeOnly) {
+ this->imgCache = imgCache;
initial = true;
modeOnly = ModeOnly;
lastDate = "";
- FrameTime = config.replayFrameTime;
- FadeTime = config.replayFadeTime;
-
- SetGeometry();
+ FadeTime = config.GetValue("replayFadeTime");
+ FrameTime = FadeTime / 10;
+ createOSD();
CreatePixmaps();
DrawBackground();
- CreateFonts();
}
cNopacityDisplayReplay::~cNopacityDisplayReplay() {
@@ -19,132 +20,205 @@ cNopacityDisplayReplay::~cNopacityDisplayReplay() {
while (Active())
cCondWait::SleepMs(10);
if (!modeOnly) {
- osd->DestroyPixmap(pixmapHeader);
osd->DestroyPixmap(pixmapBackground);
+ osd->DestroyPixmap(pixmapTop);
osd->DestroyPixmap(pixmapInfo);
osd->DestroyPixmap(pixmapDate);
osd->DestroyPixmap(pixmapInfo2);
osd->DestroyPixmap(pixmapProgressBar);
osd->DestroyPixmap(pixmapCurrent);
osd->DestroyPixmap(pixmapTotal);
- osd->DestroyPixmap(pixmapScreenResolution);
+ osd->DestroyPixmap(pixmapScreenResBackground);
+ osd->DestroyPixmap(pixmapScreenRes);
osd->DestroyPixmap(pixmapJump);
- osd->DestroyPixmap(pixmapFooter);
+ osd->DestroyPixmap(pixmapMessage);
}
osd->DestroyPixmap(pixmapControls);
osd->DestroyPixmap(pixmapRew);
- osd->DestroyPixmap(pixmapRewSpeed);
osd->DestroyPixmap(pixmapPause);
osd->DestroyPixmap(pixmapPlay);
osd->DestroyPixmap(pixmapFwd);
- osd->DestroyPixmap(pixmapFwdSpeed);
- delete fontReplayHeader;
- delete fontReplay;
delete osd;
}
-void cNopacityDisplayReplay::SetGeometry(void) {
- height = cOsd::OsdHeight() * config.replayHeight / 100;
- width = cOsd::OsdWidth() - 2 * config.replayBorderVertical;
- int top = cOsd::OsdTop() + cOsd::OsdHeight() - height - config.replayBorderBottom;
- osd = CreateOsd(cOsd::OsdLeft() + config.replayBorderVertical, top, width, height);
- headerHeight = height * 0.2;
- if (headerHeight%2 != 0)
- headerHeight++;
- footerHeight = headerHeight;
- info2Height = 0.2 * height;
- progressBarHeight = 0.1 * height;
- if (progressBarHeight%2 != 0)
- progressBarHeight++;
- currentHeight = progressBarHeight + config.fontReplay;
- controlsHeight = height - headerHeight - info2Height - footerHeight - progressBarHeight;
-
- infoWidth = 0.75 * width - config.resolutionIconSize - 10;
- dateWidth = width - infoWidth;
-
- resolutionX = 10;
- resolutionY = 5;
-
- jumpX = (width - 4 * controlsHeight)/2 + 5*controlsHeight;
- jumpY = headerHeight + info2Height + progressBarHeight;
- jumpWidth = width - jumpX;
- jumpHeight = controlsHeight;
+void cNopacityDisplayReplay::createOSD(void) {
+ int top = geoManager->osdTop
+ + geoManager->osdHeight
+ - geoManager->replayHeight
+ - config.GetValue("replayBorderBottom");
+ osd = CreateOsd(geoManager->osdLeft + config.GetValue("replayBorderVertical"),
+ top,
+ geoManager->replayWidth,
+ geoManager->replayHeight);
}
void cNopacityDisplayReplay::CreatePixmaps(void) {
if (!modeOnly) {
- pixmapHeader = osd->CreatePixmap(1, cRect(0, 0, width, headerHeight));
- pixmapBackground = osd->CreatePixmap(1, cRect(0, headerHeight, width, info2Height + progressBarHeight + controlsHeight));
- pixmapFooter = osd->CreatePixmap(1, cRect(0, headerHeight + info2Height + progressBarHeight + controlsHeight, width, footerHeight));
- pixmapInfo = osd->CreatePixmap(2, cRect(config.resolutionIconSize + 10, 0, infoWidth, headerHeight));
- pixmapDate = osd->CreatePixmap(2, cRect(infoWidth, 0, dateWidth, headerHeight));
- pixmapInfo2 = osd->CreatePixmap(2, cRect(config.resolutionIconSize + 10, headerHeight, infoWidth, info2Height));
- pixmapProgressBar = osd->CreatePixmap(2, cRect(0, headerHeight + info2Height, width, progressBarHeight));
- pixmapCurrent = osd->CreatePixmap(3, cRect(0, headerHeight + info2Height + progressBarHeight, width/5, currentHeight));
- pixmapTotal = osd->CreatePixmap(3, cRect(4*width/5, headerHeight + info2Height + progressBarHeight, width/5, currentHeight));
- pixmapScreenResolution = osd->CreatePixmap(5, cRect(resolutionX, resolutionY, config.resolutionIconSize, config.resolutionIconSize));
- pixmapJump = osd->CreatePixmap(4, cRect(jumpX, jumpY, jumpWidth, jumpHeight));
+ pixmapBackground = osd->CreatePixmap(1, cRect(0,
+ 0,
+ geoManager->replayWidth,
+ geoManager->replayHeight));
+ pixmapTop = osd->CreatePixmap(7, cRect(0,
+ 0,
+ geoManager->replayWidth,
+ geoManager->replayHeight));
+ pixmapInfo = osd->CreatePixmap(2, cRect(0,
+ 0,
+ geoManager->replayInfoWidth,
+ geoManager->replayHeaderHeight));
+ pixmapDate = osd->CreatePixmap(2, cRect(geoManager->replayInfoWidth,
+ 0,
+ geoManager->replayDateWidth,
+ geoManager->replayHeaderHeight));
+ pixmapInfo2 = osd->CreatePixmap(2, cRect(0,
+ geoManager->replayHeaderHeight,
+ geoManager->replayInfoWidth,
+ geoManager->replayInfo2Height));
+ pixmapProgressBar = osd->CreatePixmap(2, cRect(0,
+ geoManager->replayHeaderHeight
+ + geoManager->replayInfo2Height,
+ geoManager->replayWidth,
+ geoManager->replayProgressBarHeight));
+ pixmapCurrent = osd->CreatePixmap(3, cRect(0,
+ geoManager->replayHeaderHeight
+ + geoManager->replayInfo2Height
+ + geoManager->replayProgressBarHeight,
+ geoManager->replayWidth/5,
+ geoManager->replayCurrentHeight));
+ pixmapTotal = osd->CreatePixmap(3, cRect(4*geoManager->replayWidth/5,
+ geoManager->replayHeaderHeight
+ + geoManager->replayInfo2Height
+ + geoManager->replayProgressBarHeight,
+ geoManager->replayWidth/5,
+ geoManager->replayCurrentHeight));
+ pixmapScreenResBackground = osd->CreatePixmap(5, cRect(geoManager->replayResolutionX - 10,
+ geoManager->replayResolutionY - 5,
+ geoManager->replayResolutionSize * 3 + 20,
+ geoManager->replayResolutionSize + 10));
+ pixmapScreenRes = osd->CreatePixmap(6, cRect(geoManager->replayResolutionX,
+ geoManager->replayResolutionY,
+ geoManager->replayResolutionSize * 3,
+ geoManager->replayResolutionSize));
+ pixmapJump = osd->CreatePixmap(4, cRect(geoManager->replayJumpX,
+ geoManager->replayJumpY,
+ geoManager->replayJumpWidth,
+ geoManager->replayJumpHeight));
+ pixmapMessage = osd->CreatePixmap(4, cRect(0,
+ geoManager->replayMessageY,
+ geoManager->replayMessageWidth,
+ geoManager->replayMessageHeight));
}
-
- int controlY = headerHeight + info2Height + progressBarHeight;
- iconBorder = 5;
- iconSize = min(controlsHeight - 2*iconBorder, 128);
- int backgroundWidth = 2 * iconBorder + iconSize;
+
+ int controlY = geoManager->replayHeaderHeight
+ + geoManager->replayInfo2Height
+ + geoManager->replayProgressBarHeight;
+ int iconBorder = geoManager->replayIconBorder;
+ int iconSize = geoManager->replayIconSize;
+ int iconWidth = 2 * iconBorder + iconSize;
if (!modeOnly) {
- pixmapControls = osd->CreatePixmap(2, cRect(0, controlY, width, controlsHeight));
+ pixmapControls = osd->CreatePixmap(2, cRect(0,
+ controlY,
+ geoManager->replayWidth,
+ geoManager->replayControlsHeight));
} else {
- pixmapControls = osd->CreatePixmap(2, cRect( (width - (5 * backgroundWidth))/2, controlY - 10, 5 * backgroundWidth, controlsHeight + 20));
+ pixmapControls = osd->CreatePixmap(2, cRect((geoManager->replayWidth
+ - (5 * iconWidth))/2,
+ controlY - 10,
+ 5 * iconWidth,
+ geoManager->replayControlsHeight + 20));
}
- pixmapRew = osd->CreatePixmap(4, cRect((width - 4 * backgroundWidth)/2 + iconBorder, controlY + iconBorder, iconSize, iconSize));
- pixmapRewSpeed = osd->CreatePixmap(5, cRect((width - 4 * backgroundWidth)/2 + iconBorder, controlY + iconBorder, iconSize, iconSize));
- pixmapPause = osd->CreatePixmap(4, cRect((width - 4 * backgroundWidth)/2 + (iconSize + 2*iconBorder) + iconBorder, controlY + iconBorder, iconSize, iconSize));
- pixmapPlay = osd->CreatePixmap(4, cRect((width - 4 * backgroundWidth)/2 + 2*(iconSize + 2*iconBorder) + iconBorder, controlY + iconBorder, iconSize, iconSize));
- pixmapFwd = osd->CreatePixmap(4, cRect((width - 4 * backgroundWidth)/2 + 3*(iconSize + 2*iconBorder) + iconBorder, controlY + iconBorder, iconSize, iconSize));
- pixmapFwdSpeed = osd->CreatePixmap(5, cRect((width - 4 * backgroundWidth)/2 + 3*(iconSize + 2*iconBorder) + iconBorder, controlY + iconBorder, iconSize, iconSize));
+ int iconX = (geoManager->replayWidth - 4 * iconWidth)/2;
+ pixmapRew = osd->CreatePixmap(4, cRect(iconX + iconBorder,
+ controlY + iconBorder,
+ iconSize,
+ iconSize));
+ pixmapPause = osd->CreatePixmap(4, cRect(iconX + iconSize + 3*iconBorder,
+ controlY + iconBorder,
+ iconSize,
+ iconSize));
+ pixmapPlay = osd->CreatePixmap(4, cRect(iconX + 2*iconSize + 3*iconBorder,
+ controlY + iconBorder,
+ iconSize,
+ iconSize));
+ pixmapFwd = osd->CreatePixmap(4, cRect(iconX + 3*iconSize + 3*iconBorder,
+ controlY + iconBorder,
+ iconSize,
+ iconSize));
- if (config.replayFadeTime) {
+ if (FadeTime) {
if (!modeOnly) {
- pixmapHeader->SetAlpha(0);
pixmapBackground->SetAlpha(0);
+ pixmapTop->SetAlpha(0);
pixmapInfo->SetAlpha(0);
pixmapDate->SetAlpha(0);
pixmapInfo2->SetAlpha(0);
pixmapProgressBar->SetAlpha(0);
pixmapCurrent->SetAlpha(0);
pixmapTotal->SetAlpha(0);
- pixmapScreenResolution->SetAlpha(0);
+ pixmapScreenResBackground->SetAlpha(0);
+ pixmapScreenRes->SetAlpha(0);
pixmapJump->SetAlpha(0);
- pixmapFooter->SetAlpha(0);
+ pixmapMessage->SetAlpha(0);
}
pixmapControls->SetAlpha(0);
- pixmapRew->SetAlpha(0);
- pixmapRewSpeed->SetAlpha(0);
- pixmapPause->SetAlpha(0);
- pixmapPlay->SetAlpha(0);
+ pixmapRew->SetAlpha(0);
+ pixmapPause->SetAlpha(0);
+ pixmapPlay->SetAlpha(0);
pixmapFwd->SetAlpha(0);
- pixmapFwdSpeed->SetAlpha(0);
+ } else if (!modeOnly) {
+ int alphaBack = (100 - config.GetValue("channelBackgroundTransparency"))*255/100;
+ pixmapBackground->SetAlpha(alphaBack);
}
}
-void cNopacityDisplayReplay::CreateFonts(void) {
- fontReplayHeader = cFont::CreateFont(config.fontName, headerHeight - 8 + config.fontReplayHeader);
- fontReplay = cFont::CreateFont(config.fontName, currentHeight);
-}
-
void cNopacityDisplayReplay::DrawBackground(void) {
if (!modeOnly) {
- DrawBlendedBackground(pixmapHeader, Theme.Color(clrReplayBackground), Theme.Color(clrReplayBackBlend), true);
- pixmapHeader->DrawEllipse(cRect(0,0, headerHeight/2, headerHeight/2), clrTransparent, -2);
- pixmapHeader->DrawEllipse(cRect(width - headerHeight/2 ,0 ,headerHeight/2,headerHeight/2), clrTransparent, -1);
- pixmapBackground->Fill(Theme.Color(clrReplayBackground));
+ if (config.GetValue("displayType") == dtGraphical) {
+ cImage *imgBack = imgCache->GetSkinElement(seReplayBackground);
+ if (imgBack)
+ pixmapBackground->DrawImage(cPoint(0,0), *imgBack);
+ cImage *imgTop = imgCache->GetSkinElement(seReplayTop);
+ if (imgTop)
+ pixmapTop->DrawImage(cPoint(0,0), *imgTop);
+ else
+ pixmapTop->Fill(clrTransparent);
+ } else {
+ pixmapBackground->Fill(Theme.Color(clrReplayBackground));
+ pixmapTop->Fill(clrTransparent);
+ if (config.GetValue("displayType") == dtBlending &&
+ (Theme.Color(clrReplayBackground) != Theme.Color(clrReplayBackBlend))) {
+ DrawBlendedBackground(pixmapBackground,
+ 0,
+ geoManager->replayWidth,
+ Theme.Color(clrReplayBackground),
+ Theme.Color(clrReplayBackBlend),
+ true);
+ DrawBlendedBackground(pixmapBackground,
+ 0,
+ geoManager->replayWidth,
+ Theme.Color(clrReplayBackground),
+ Theme.Color(clrReplayBackBlend),
+ false);
+ }
+ if (config.GetValue("roundedCornersChannel")) {
+ int cornerRadius = geoManager->replayHeaderHeight/2;
+ if (cornerRadius > 2) {
+ DrawRoundedCorners(pixmapBackground,
+ cornerRadius,
+ 0,
+ 0,
+ geoManager->replayWidth,
+ geoManager->replayHeight);
+ }
+ }
+ }
pixmapControls->Fill(clrTransparent);
pixmapProgressBar->Fill(clrTransparent);
- pixmapScreenResolution->Fill(clrTransparent);
+ pixmapScreenResBackground->Fill(clrTransparent);
+ pixmapScreenRes->Fill(clrTransparent);
pixmapJump->Fill(clrTransparent);
- DrawBlendedBackground(pixmapFooter, Theme.Color(clrReplayBackground), Theme.Color(clrReplayBackBlend), false);
- pixmapFooter->DrawEllipse(cRect(0,footerHeight/2,footerHeight/2,footerHeight/2), clrTransparent, -3);
- pixmapFooter->DrawEllipse(cRect(width - footerHeight/2, footerHeight/2 ,footerHeight/2,footerHeight/2), clrTransparent, -4);
+ pixmapMessage->Fill(clrTransparent);
} else {
pixmapControls->Fill(Theme.Color(clrMenuBorder));
pixmapControls->DrawRectangle(cRect(2, 2, pixmapControls->ViewPort().Width() - 4, pixmapControls->ViewPort().Height() - 4),Theme.Color(clrReplayBackground));
@@ -152,37 +226,39 @@ void cNopacityDisplayReplay::DrawBackground(void) {
}
void cNopacityDisplayReplay::LoadControlIcons(void) {
-
pixmapRew->Fill(clrTransparent);
pixmapPause->Fill(clrTransparent);
pixmapPlay->Fill(clrTransparent);
pixmapFwd->Fill(clrTransparent);
-
- cImageLoader imgLoader;
- if (imgLoader.LoadIcon("skinIcons/rewInactive", iconSize)) {
- pixmapRew->DrawImage(cPoint(0,0), imgLoader.GetImage());
- }
- if (imgLoader.LoadIcon("skinIcons/pauseInactive", iconSize)) {
- pixmapPause->DrawImage(cPoint(0,0), imgLoader.GetImage());
- }
- if (imgLoader.LoadIcon("skinIcons/playInactive", iconSize)) {
- pixmapPlay->DrawImage(cPoint(0,0), imgLoader.GetImage());
- }
- if (imgLoader.LoadIcon("skinIcons/fwdInactive", iconSize)) {
- pixmapFwd->DrawImage(cPoint(0,0), imgLoader.GetImage());
- }
+ int iconSize = geoManager->replayIconSize;
+ cImage *imgRew = imgCache->GetSkinIcon("skinIcons/rewInactive", iconSize, iconSize);
+ if (imgRew)
+ pixmapRew->DrawImage(cPoint(0,0), *imgRew);
+ cImage *imgPause = imgCache->GetSkinIcon("skinIcons/pauseInactive", iconSize, iconSize);
+ if (imgPause)
+ pixmapPause->DrawImage(cPoint(0,0), *imgPause);
+ cImage *imgPlay = imgCache->GetSkinIcon("skinIcons/playInactive", iconSize, iconSize);
+ if (imgPlay)
+ pixmapPlay->DrawImage(cPoint(0,0), *imgPlay);
+ cImage *imgFwd = imgCache->GetSkinIcon("skinIcons/fwdInactive", iconSize, iconSize);
+ if (imgFwd)
+ pixmapFwd->DrawImage(cPoint(0,0), *imgFwd);
}
void cNopacityDisplayReplay::DrawDate(void) {
cString curDate = DayDateTime();
if (initial || strcmp(curDate, lastDate)) {
- int strDateWidth = fontReplay->Width(curDate);
- int strDateHeight = fontReplay->Height();
- int x = dateWidth - strDateWidth - headerHeight/2;
- int y = (headerHeight - strDateHeight) / 2;
+ int strDateWidth = fontManager->replayText->Width(curDate);
+ int strDateHeight = fontManager->replayText->Height();
+ int x = geoManager->replayDateWidth - strDateWidth - geoManager->replayHeaderHeight/2;
+ int y = (geoManager->replayHeaderHeight - strDateHeight) / 2;
pixmapDate->Fill(clrTransparent);
- pixmapDate->DrawText(cPoint(x, y), curDate, Theme.Color(clrReplayHead), clrTransparent, fontReplay);
+ pixmapDate->DrawText(cPoint(x, y),
+ curDate,
+ Theme.Color(clrReplayHead),
+ clrTransparent,
+ fontManager->replayText);
lastDate = curDate;
}
}
@@ -196,114 +272,211 @@ void cNopacityDisplayReplay::DrawScreenResolution(void) {
switch (screenWidth) {
case 1920:
case 1440:
- iconName = "skinIcons/hd1080i";
+ iconName = "skinIcons/hd1080i_rec";
break;
case 1280:
if (screenHeight == 720)
- iconName = "skinIcons/hd720p";
+ iconName = "skinIcons/hd720p_rec";
else
- iconName = "skinIcons/hd1080i";
+ iconName = "skinIcons/hd1080i_rec";
break;
case 720:
- iconName = "skinIcons/sd576i";
+ iconName = "skinIcons/sd576i_rec";
break;
default:
- iconName = "skinIcons/sd576i";
+ iconName = "skinIcons/sd576i_rec";
break;
}
- cImageLoader imgLoader;
- if (imgLoader.LoadIcon(*iconName, config.resolutionIconSize)) {
- pixmapScreenResolution->DrawImage(cPoint(0,0), imgLoader.GetImage());
+ int replaySize = geoManager->replayResolutionSize;
+ cImage *imgRes = imgCache->GetSkinIcon(*iconName, 3 * replaySize, replaySize);
+ if (imgRes) {
+ pixmapScreenResBackground->Fill(Theme.Color(clrStatusIconsBack));
+ DrawRoundedCorners(pixmapScreenResBackground,
+ 5,
+ 0,
+ 0,
+ pixmapScreenResBackground->ViewPort().Width(),
+ pixmapScreenResBackground->ViewPort().Height()
+ );
+ pixmapScreenRes->DrawImage(cPoint(0,0), *imgRes);
}
}
void cNopacityDisplayReplay::SetRecording(const cRecording *Recording) {
const cRecordingInfo *RecordingInfo = Recording->Info();
- SetTitle(RecordingInfo->Title());
+ const char *recName = RecordingInfo->Title();
+ if (!recName) {
+ recName = Recording->Name();
+ }
+ SetTitle(recName);
cString info2;
if (RecordingInfo->ShortText())
info2 = cString::sprintf("%s - %s %s", RecordingInfo->ShortText(), *ShortDateString(Recording->Start()), *TimeString(Recording->Start()));
else
info2 = cString::sprintf("%s %s", *ShortDateString(Recording->Start()), *TimeString(Recording->Start()));
-
+
pixmapInfo2->Fill(clrTransparent);
- pixmapInfo2->DrawText(cPoint(headerHeight/2, max( (info2Height - fontReplay->Height())/2 - 10,0 )), *info2, Theme.Color(clrReplayDescription), clrTransparent, fontReplay);
+ pixmapInfo2->DrawText(cPoint(geoManager->replayHeaderHeight/2,
+ max((geoManager->replayInfo2Height
+ - fontManager->replayText->Height())/2 - 10,
+ 0)),
+ *info2,
+ Theme.Color(clrReplayDescription),
+ clrTransparent,
+ fontManager->replayText);
DrawScreenResolution();
}
void cNopacityDisplayReplay::SetTitle(const char *Title) {
pixmapInfo->Fill(clrTransparent);
- pixmapInfo->DrawText(cPoint(headerHeight/2, 0), Title, Theme.Color(clrReplayHead), clrTransparent, fontReplayHeader);
+ if (!Title)
+ return;
+ int titleLength = fontManager->replayHeader->Width(Title);
+ int titleSpace = geoManager->replayInfoWidth - geoManager->replayHeaderHeight/2;
+ std::string strTitle = Title;
+ if (titleLength > titleSpace)
+ strTitle = CutText(strTitle, titleSpace, fontManager->replayHeader);
+ pixmapInfo->DrawText(cPoint(geoManager->replayHeaderHeight/2, 0),
+ strTitle.c_str(),
+ Theme.Color(clrReplayHead),
+ clrTransparent,
+ fontManager->replayHeader);
}
void cNopacityDisplayReplay::SetMode(bool Play, bool Forward, int Speed) {
LoadControlIcons();
- pixmapRewSpeed->Fill(clrTransparent);
- pixmapFwdSpeed->Fill(clrTransparent);
-
- cImageLoader imgLoader;
- if (!Play) {
- pixmapPause->Fill(clrTransparent);
- if (imgLoader.LoadIcon("skinIcons/pause", iconSize)) {
- pixmapPause->DrawImage(cPoint(0,0), imgLoader.GetImage());
+ int iconSize = geoManager->replayIconSize;
+ if (Speed == -1) {
+ if (Play) {
+ pixmapPlay->Fill(clrTransparent);
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/play", iconSize, iconSize);
+ if (imgIcon)
+ pixmapPlay->DrawImage(cPoint(0,0), *imgIcon);
+ } else {
+ pixmapPause->Fill(clrTransparent);
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/pause", iconSize, iconSize);
+ if (imgIcon)
+ pixmapPause->DrawImage(cPoint(0,0), *imgIcon);
}
- } else if (Play && (Speed < 0)) {
- pixmapPlay->Fill(clrTransparent);
- if (imgLoader.LoadIcon("skinIcons/play", iconSize)) {
- pixmapPlay->DrawImage(cPoint(0,0), imgLoader.GetImage());
+ } else if (Forward) {
+ if (!Play) {
+ pixmapPause->Fill(clrTransparent);
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/pause", iconSize, iconSize);
+ if (imgIcon)
+ pixmapPause->DrawImage(cPoint(0,0), *imgIcon);
}
- } else if (Play && Forward) {
pixmapFwd->Fill(clrTransparent);
- if (imgLoader.LoadIcon("skinIcons/fwd", iconSize)) {
- pixmapFwd->DrawImage(cPoint(0,0), imgLoader.GetImage());
- }
if (Speed > 0) {
- cString speed = cString::sprintf("x%d", Speed);
- int sWidth = fontReplayHeader->Width(*speed);
- pixmapFwdSpeed->DrawText(cPoint((iconSize - sWidth)/2, (iconSize - fontReplayHeader->Height())/2), *speed, Theme.Color(clrReplayHighlightIcon), clrTransparent, fontReplayHeader);
+ cString trickIcon = cString::sprintf("skinIcons/fwdx%d", Speed);
+ cImage *imgIcon = imgCache->GetSkinIcon(*trickIcon, iconSize, iconSize);
+ if (imgIcon)
+ pixmapFwd->DrawImage(cPoint(0,0), *imgIcon);
+ } else {
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/fwd", iconSize, iconSize);
+ if (imgIcon)
+ pixmapFwd->DrawImage(cPoint(0,0), *imgIcon);
}
- } else if (Play && !Forward) {
- pixmapRew->Fill(clrTransparent);
- if (imgLoader.LoadIcon("skinIcons/rew", iconSize)) {
- pixmapRew->DrawImage(cPoint(0,0), imgLoader.GetImage());
+ } else {
+ if (!Play) {
+ pixmapPause->Fill(clrTransparent);
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/pause", iconSize, iconSize);
+ if (imgIcon)
+ pixmapPause->DrawImage(cPoint(0,0), *imgIcon);
}
+ pixmapRew->Fill(clrTransparent);
if (Speed > 0) {
- cString speed = cString::sprintf("x%d", Speed);
- int sWidth = fontReplayHeader->Width(*speed);
- pixmapRewSpeed->DrawText(cPoint((iconSize - sWidth)/2, (iconSize - fontReplayHeader->Height())/2), *speed, Theme.Color(clrReplayHighlightIcon), clrTransparent, fontReplayHeader);
+ cString trickIcon = cString::sprintf("skinIcons/rewx%d", Speed);
+ cImage *imgIcon = imgCache->GetSkinIcon(*trickIcon, iconSize, iconSize);
+ if (imgIcon)
+ pixmapRew->DrawImage(cPoint(0,0), *imgIcon);
+ } else {
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/rew", iconSize, iconSize);
+ if (imgIcon)
+ pixmapRew->DrawImage(cPoint(0,0), *imgIcon);
}
}
-
}
void cNopacityDisplayReplay::SetProgress(int Current, int Total) {
- int barWidth = width - 2*progressBarHeight;
- cProgressBar pb(barWidth, progressBarHeight-2, Current, Total, marks, Theme.Color(clrReplayProgressSeen), Theme.Color(clrReplayProgressRest), Theme.Color(clrReplayProgressSelected), Theme.Color(clrReplayProgressMark), Theme.Color(clrReplayProgressCurrent));
- pixmapProgressBar->DrawEllipse(cRect(progressBarHeight/2, 0, progressBarHeight, progressBarHeight), Theme.Color(clrProgressBarBack));
- pixmapProgressBar->DrawEllipse(cRect(barWidth + progressBarHeight/2, 0, progressBarHeight, progressBarHeight), Theme.Color(clrReplayProgressRest));
- pixmapProgressBar->DrawRectangle(cRect( progressBarHeight, 0, barWidth, progressBarHeight), Theme.Color(clrProgressBarBack));
- pixmapProgressBar->DrawEllipse(cRect(progressBarHeight/2+1, 1, progressBarHeight-1, progressBarHeight-2), Theme.Color(clrReplayProgressSeen));
- pixmapProgressBar->DrawBitmap(cPoint(progressBarHeight, 1), pb);
+ if (geoManager->replayProgressBarHeight < 5)
+ return;
+ int barWidth = geoManager->replayWidth - 2*geoManager->replayProgressBarHeight;
+ cProgressBar pb(barWidth,
+ geoManager->replayProgressBarHeight-2,
+ Current,
+ Total,
+ marks,
+ Theme.Color(clrReplayProgressSeen),
+ Theme.Color(clrReplayProgressRest),
+ Theme.Color(clrReplayProgressSelected),
+ Theme.Color(clrReplayProgressMark),
+ Theme.Color(clrReplayProgressCurrent));
+ pixmapProgressBar->DrawEllipse(cRect(geoManager->replayProgressBarHeight/2,
+ 0,
+ geoManager->replayProgressBarHeight,
+ geoManager->replayProgressBarHeight),
+ Theme.Color(clrProgressBarBack));
+ pixmapProgressBar->DrawEllipse(cRect(barWidth + geoManager->replayProgressBarHeight/2,
+ 0,
+ geoManager->replayProgressBarHeight,
+ geoManager->replayProgressBarHeight),
+ Theme.Color(clrReplayProgressRest));
+ pixmapProgressBar->DrawRectangle(cRect(geoManager->replayProgressBarHeight,
+ 0,
+ barWidth,
+ geoManager->replayProgressBarHeight),
+ Theme.Color(clrProgressBarBack));
+ pixmapProgressBar->DrawEllipse(cRect(geoManager->replayProgressBarHeight/2+1,
+ 1,
+ geoManager->replayProgressBarHeight-1,
+ geoManager->replayProgressBarHeight-2),
+ Theme.Color(clrReplayProgressSeen));
+ pixmapProgressBar->DrawBitmap(cPoint(geoManager->replayProgressBarHeight, 1), pb);
}
void cNopacityDisplayReplay::SetCurrent(const char *Current) {
pixmapCurrent->Fill(clrTransparent);
- pixmapCurrent->DrawText(cPoint(headerHeight/2, 0), Current, Theme.Color(clrReplayCurrentTotal), clrTransparent, fontReplay);
+ pixmapCurrent->DrawText(cPoint(geoManager->replayHeaderHeight/2, 0),
+ Current,
+ Theme.Color(clrReplayCurrentTotal),
+ clrTransparent,
+ fontManager->replayText);
}
void cNopacityDisplayReplay::SetTotal(const char *Total) {
pixmapTotal->Fill(clrTransparent);
- pixmapTotal->DrawText(cPoint(width/5 - (fontReplay->Width(Total) + headerHeight/2), 0), Total, Theme.Color(clrReplayCurrentTotal), clrTransparent, fontReplay);
+ pixmapTotal->DrawText(cPoint(geoManager->replayWidth/5
+ - (fontManager->replayText->Width(Total)
+ + geoManager->replayHeaderHeight/2),
+ 0),
+ Total,
+ Theme.Color(clrReplayCurrentTotal),
+ clrTransparent,
+ fontManager->replayText);
}
void cNopacityDisplayReplay::SetJump(const char *Jump) {
pixmapJump->Fill(clrTransparent);
if (Jump) {
- pixmapJump->DrawText(cPoint(0, (jumpHeight - fontReplayHeader->Height())/2), Jump, Theme.Color(clrReplayCurrentTotal), clrTransparent, fontReplayHeader);
+ pixmapJump->DrawText(cPoint(0,
+ (geoManager->replayJumpHeight
+ - fontManager->replayHeader->Height())/2),
+ Jump,
+ Theme.Color(clrReplayCurrentTotal),
+ clrTransparent,
+ fontManager->replayHeader);
}
}
void cNopacityDisplayReplay::SetMessage(eMessageType Type, const char *Text) {
+ pixmapMessage->Fill(clrTransparent);
+ if (!Text)
+ return;
+ pixmapMessage->DrawText(cPoint(geoManager->replayMessageHeight/2, 0),
+ Text,
+ Theme.Color(clrReplayHead),
+ clrTransparent,
+ fontManager->replayHeader);
}
void cNopacityDisplayReplay::Flush(void) {
@@ -311,7 +484,7 @@ void cNopacityDisplayReplay::Flush(void) {
DrawDate();
}
if (initial) {
- if (config.replayFadeTime)
+ if (FadeTime)
Start();
}
initial = false;
@@ -326,28 +499,29 @@ void cNopacityDisplayReplay::Action(void) {
double t = min(double(Now - Start) / FadeTime, 1.0);
int Alpha = t * ALPHA_OPAQUE;
if (!modeOnly) {
- pixmapHeader->SetAlpha(Alpha);
- pixmapBackground->SetAlpha(Alpha);
+ int alphaBack = (100 - config.GetValue("channelBackgroundTransparency"))*Alpha/100;
+ pixmapBackground->SetAlpha(alphaBack);
+ pixmapTop->SetAlpha(Alpha);
pixmapInfo->SetAlpha(Alpha);
pixmapDate->SetAlpha(Alpha);
pixmapInfo2->SetAlpha(Alpha);
pixmapProgressBar->SetAlpha(Alpha);
pixmapCurrent->SetAlpha(Alpha);
pixmapTotal->SetAlpha(Alpha);
- pixmapScreenResolution->SetAlpha(Alpha);
+ pixmapScreenResBackground->SetAlpha(Alpha);
+ pixmapScreenRes->SetAlpha(Alpha);
pixmapJump->SetAlpha(Alpha);
- pixmapFooter->SetAlpha(Alpha);
+ pixmapMessage->SetAlpha(Alpha);
+
}
pixmapControls->SetAlpha(Alpha);
- pixmapRew->SetAlpha(Alpha);
- pixmapRewSpeed->SetAlpha(Alpha);
- pixmapPause->SetAlpha(Alpha);
- pixmapPlay->SetAlpha(Alpha);
+ pixmapRew->SetAlpha(Alpha);
+ pixmapPause->SetAlpha(Alpha);
+ pixmapPlay->SetAlpha(Alpha);
pixmapFwd->SetAlpha(Alpha);
- pixmapFwdSpeed->SetAlpha(Alpha);
+ cPixmap::Unlock();
if (Running())
osd->Flush();
- cPixmap::Unlock();
int Delta = cTimeMs::Now() - Now;
if (Running() && (Delta < FrameTime))
cCondWait::SleepMs(FrameTime - Delta);
diff --git a/displayreplay.h b/displayreplay.h
index ae7ee5f..9ada0fc 100644
--- a/displayreplay.h
+++ b/displayreplay.h
@@ -1,58 +1,45 @@
#ifndef __NOPACITY_DISPLAYREPLAY_H
#define __NOPACITY_DISPLAYREPLAY_H
+#include <vdr/skins.h>
+#include <vdr/thread.h>
+#include "imagecache.h"
+
class cNopacityDisplayReplay : public cSkinDisplayReplay , cThread{
private:
cOsd *osd;
+ cImageCache *imgCache;
bool initial;
bool modeOnly;
cString lastDate;
- int width;
- int height;
- int headerHeight;
- int info2Height;
- int progressBarHeight;
- int currentHeight;
- int controlsHeight;
- int footerHeight;
- int infoWidth;
- int dateWidth;
- int iconSize, iconBorder;
- int resolutionX, resolutionY;
- int jumpX, jumpY;
- int jumpWidth, jumpHeight;
int FrameTime;
int FadeTime;
- cPixmap *pixmapHeader;
cPixmap *pixmapBackground;
+ cPixmap *pixmapTop;
cPixmap *pixmapInfo;
cPixmap *pixmapDate;
cPixmap *pixmapInfo2;
cPixmap *pixmapProgressBar;
cPixmap *pixmapCurrent;
cPixmap *pixmapTotal;
- cPixmap *pixmapScreenResolution;
+ cPixmap *pixmapScreenRes;
+ cPixmap *pixmapScreenResBackground;
cPixmap *pixmapControls;
cPixmap *pixmapRew;
- cPixmap *pixmapRewSpeed;
cPixmap *pixmapPause;
cPixmap *pixmapPlay;
cPixmap *pixmapFwd;
- cPixmap *pixmapFwdSpeed;
cPixmap *pixmapJump;
- cPixmap *pixmapFooter;
- cFont *fontReplayHeader;
- cFont *fontReplay;
+ cPixmap *pixmapMessage;
virtual void Action(void);
- void SetGeometry(void);
+ void createOSD(void);
void CreatePixmaps(void);
- void CreateFonts(void);
void DrawBackground(void);
void DrawDate(void);
void LoadControlIcons(void);
void DrawScreenResolution(void);
public:
- cNopacityDisplayReplay(bool ModeOnly);
+ cNopacityDisplayReplay(cImageCache *imgCache, bool ModeOnly);
virtual ~cNopacityDisplayReplay();
virtual void SetRecording(const cRecording *Recording);
virtual void SetTitle(const char *Title);
@@ -64,5 +51,5 @@ public:
virtual void SetMessage(eMessageType Type, const char *Text);
virtual void Flush(void);
};
-
+
#endif //__NOPACITY_DISPLAYREPLAY_H
\ No newline at end of file
diff --git a/displaytracks.c b/displaytracks.c
index 8dcdc96..7c2a1e1 100644
--- a/displaytracks.c
+++ b/displaytracks.c
@@ -1,17 +1,19 @@
#include "displaytracks.h"
+#include "config.h"
+#include "helpers.h"
+#include "imageloader.h"
-cNopacityDisplayTracks::cNopacityDisplayTracks(const char *Title, int NumTracks, const char * const *Tracks) {
- config.setDynamicValues();
+
+cNopacityDisplayTracks::cNopacityDisplayTracks(cImageCache *imgCache, const char *Title, int NumTracks, const char * const *Tracks) {
+ this->imgCache = imgCache;
initial = true;
currentIndex = -1;
numTracks = NumTracks;
audioChannelLast = -5;
- FrameTime = config.tracksFrameTime;
- FadeTime = config.tracksFadeTime;
+ FadeTime = config.GetValue("tracksFadeTime");
+ FrameTime = FadeTime / 10;
SetGeometry();
CreatePixmaps();
- CreateFonts();
- CreateBackgroundImages();
DrawHeader(Title);
for (int i = 0; i < NumTracks; i++)
SetItem(Tracks[i], i, false);
@@ -25,57 +27,53 @@ cNopacityDisplayTracks::~cNopacityDisplayTracks() {
osd->DestroyPixmap(pixmapHeader);
osd->DestroyPixmap(pixmapHeaderAudio);
menuItems.Clear();
- for (int i=0; i<2; i++)
- cOsdProvider::DropImage(handleBackgrounds[i]);
- delete font;
- delete fontHeader;
delete osd;
}
void cNopacityDisplayTracks::SetGeometry(void) {
- width = cOsd::OsdWidth() * config.tracksWidth / 100;
- height = (config.tracksItemHeight +4) * (numTracks+1);
+ width = geoManager->trackWidth;
+ height = (config.GetValue("tracksItemHeight") +4) * (numTracks+1);
- menuItemWidth = width - 4;
- menuItemHeight = config.tracksItemHeight;
+ menuItemWidth = geoManager->menuItemWidthTracks;
+ menuItemHeight = geoManager->menuItemHeightTracks;
int top, left;
- switch(config.tracksPosition) {
+ switch(config.GetValue("tracksPosition")) {
case 0: //middle bottom
- top = cOsd::OsdHeight() - cOsd::OsdTop() - height - config.tracksBorderHorizontal;
- left = (cOsd::OsdWidth() - width) / 2;
+ top = geoManager->osdTop + geoManager->osdHeight - height - config.GetValue("tracksBorderVertical");
+ left = geoManager->osdLeft + (geoManager->osdWidth - width) / 2;
break;
case 1: //left bottom
- top = cOsd::OsdHeight() - cOsd::OsdTop() - height - config.tracksBorderHorizontal;
- left = cOsd::OsdLeft();
+ top = geoManager->osdTop + geoManager->osdHeight - height - config.GetValue("tracksBorderVertical");
+ left = geoManager->osdLeft + config.GetValue("tracksBorderHorizontal");
break;
case 2: //left middle
- top = (cOsd::OsdHeight() - height) / 2;
- left = cOsd::OsdLeft() + config.tracksBorderVertical;
+ top = geoManager->osdTop + (geoManager->osdHeight - height) / 2;
+ left = geoManager->osdLeft + config.GetValue("tracksBorderHorizontal");
break;
case 3: //left top
- top = cOsd::OsdTop() + config.tracksBorderHorizontal;
- left = cOsd::OsdLeft() + config.tracksBorderVertical;
+ top = geoManager->osdTop + config.GetValue("tracksBorderVertical");
+ left = geoManager->osdLeft + config.GetValue("tracksBorderHorizontal");
break;
case 4: //top middle
- top = cOsd::OsdTop() + config.tracksBorderHorizontal;
- left = (cOsd::OsdWidth() - width) / 2;
+ top = geoManager->osdTop + config.GetValue("tracksBorderVertical");
+ left = geoManager->osdLeft + (geoManager->osdWidth - width) / 2;
break;
case 5: //top right
- top = cOsd::OsdTop() + config.tracksBorderHorizontal;
- left = cOsd::OsdWidth() - cOsd::OsdLeft() - width - config.tracksBorderVertical;
+ top = geoManager->osdTop + config.GetValue("tracksBorderVertical");
+ left = geoManager->osdLeft + geoManager->osdWidth - width - config.GetValue("tracksBorderHorizontal");
break;
case 6: //right middle
- top = (cOsd::OsdHeight() - height) / 2;
- left = cOsd::OsdWidth() - cOsd::OsdLeft() - width - config.tracksBorderVertical;
+ top = geoManager->osdTop + (geoManager->osdHeight - height) / 2;
+ left = geoManager->osdLeft + geoManager->osdWidth - width - config.GetValue("tracksBorderHorizontal");
break;
case 7: //right bottom
- top = cOsd::OsdHeight() - cOsd::OsdTop() - height - config.tracksBorderHorizontal;
- left = cOsd::OsdWidth() - cOsd::OsdLeft() - width - config.tracksBorderVertical;
+ top = geoManager->osdTop + geoManager->osdHeight - height - config.GetValue("tracksBorderVertical");
+ left = geoManager->osdLeft + geoManager->osdWidth - width - config.GetValue("tracksBorderHorizontal");
break;
default: //middle bottom
- top = cOsd::OsdHeight() - cOsd::OsdTop() - height - config.tracksBorderHorizontal;
- left = (cOsd::OsdWidth() - width) / 2;
+ top = geoManager->osdTop + geoManager->osdHeight - height - config.GetValue("tracksBorderVertical");
+ left = geoManager->osdLeft + (geoManager->osdWidth - width) / 2;
break;
}
osd = CreateOsd(left, top, width, height);
@@ -85,49 +83,48 @@ void cNopacityDisplayTracks::CreatePixmaps(void) {
pixmapContainer = osd->CreatePixmap(1, cRect(0, 0, width, height));
pixmapHeader = osd->CreatePixmap(2, cRect(2, 2, menuItemWidth, menuItemHeight));
pixmapHeaderAudio = osd->CreatePixmap(3, cRect(menuItemWidth - menuItemHeight, 2, menuItemHeight, menuItemHeight));
- if (config.tracksFadeTime) {
+ if (FadeTime) {
pixmapContainer->SetAlpha(0);
pixmapHeader->SetAlpha(0);
pixmapHeaderAudio->SetAlpha(0);
}
}
-void cNopacityDisplayTracks::CreateFonts(void) {
- font = cFont::CreateFont(config.fontName, menuItemHeight/3 + config.fontTracks);
- fontHeader = cFont::CreateFont(config.fontName, menuItemHeight/2 + config.fontTracksHeader);
-}
-
-void cNopacityDisplayTracks::CreateBackgroundImages(void) {
- cImageLoader imgLoader;
- imgLoader.DrawBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), menuItemWidth-2, menuItemHeight-2);
- handleBackgrounds[0] = cOsdProvider::StoreImage(imgLoader.GetImage());
- imgLoader.DrawBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), menuItemWidth-2, menuItemHeight-2);
- handleBackgrounds[1] = cOsdProvider::StoreImage(imgLoader.GetImage());
-}
-
void cNopacityDisplayTracks::DrawHeader(const char *Title) {
pixmapContainer->Fill(Theme.Color(clrMenuBorder));
pixmapContainer->DrawRectangle(cRect(1, 1, width-2, height-2), Theme.Color(clrMenuBack));
-
- pixmapHeader->Fill(Theme.Color(clrMenuItem));
- pixmapHeader->DrawImage(cPoint(1, 1), handleBackgrounds[0]);
+ if (config.GetValue("displayType") == dtBlending) {
+ pixmapHeader->Fill(Theme.Color(clrMenuItem));
+ cImage *back = imgCache->GetSkinElement(seTracks);
+ if (back)
+ pixmapHeader->DrawImage(cPoint(1, 1), *back);
+ } else if (config.GetValue("displayType") == dtGraphical) {
+ cImage *back = imgCache->GetSkinElement(seTracks);
+ if (back)
+ pixmapHeader->DrawImage(cPoint(0, 0), *back);
+ } else {
+ pixmapHeader->Fill(Theme.Color(clrMenuItem));
+ pixmapHeader->DrawRectangle(cRect(1, 1, width-2, height-2), Theme.Color(clrAudioMenuHeader));
+ }
pixmapIcon = osd->CreatePixmap(3, cRect(2, 2, menuItemHeight-2, menuItemHeight-2));
pixmapIcon->Fill(clrTransparent);
- cImageLoader imgLoader;
- if (imgLoader.LoadIcon("skinIcons/tracks", menuItemHeight-6)) {
- pixmapIcon->DrawImage(cPoint(3, 3), imgLoader.GetImage());
- }
- pixmapHeader->DrawText(cPoint((width - fontHeader->Width(Title)) / 2, (menuItemHeight - fontHeader->Height()) / 2), Title, Theme.Color(clrTracksFontHead), clrTransparent, fontHeader);
+
+ cImage *imgTracks = imgCache->GetSkinIcon("skinIcons/tracks", menuItemHeight-6, menuItemHeight-6);
+ if (imgTracks)
+ pixmapIcon->DrawImage(cPoint(3,3), *imgTracks);
+ pixmapIcon->DrawText(cPoint((width - fontManager->trackHeader->Width(Title)) / 2, (menuItemHeight - fontManager->trackHeader->Height()) / 2), Title, Theme.Color(clrTracksFontHead), clrTransparent, fontManager->trackHeader);
}
void cNopacityDisplayTracks::SetItem(const char *Text, int Index, bool Current) {
cNopacityMenuItem *item;
- item = new cNopacityTrackMenuItem(osd, Text);
+ item = new cNopacityTrackMenuItem(osd, imgCache, Text);
item->SetCurrent(Current);
- item->SetFont(font);
+ item->SetFont(fontManager->trackText);
item->SetGeometry(Index, menuItemHeight+4, 2, menuItemWidth, menuItemHeight, 4);
- item->CreatePixmap();
- item->SetBackgrounds(handleBackgrounds);
+ item->CreatePixmapBackground();
+ item->CreatePixmapStatic();
+ if (config.GetValue("displayType") == dtGraphical)
+ item->CreatePixmapForeground();
menuItems.Add(item);
item->Render();
}
@@ -151,26 +148,26 @@ void cNopacityDisplayTracks::SetAudioChannel(int AudioChannel) {
pixmapHeaderAudio->Fill(clrTransparent);
cString icon("");
switch (AudioChannel) {
- case -1:
+ case -1:
icon = "skinIcons/ac3";
break;
- case 0:
- icon = "skinIcons/stereo";
+ case 0:
+ icon = "skinIcons/stereo";
break;
default:
- icon = "skinIcons/stereo";
+ icon = "skinIcons/stereo";
break;
}
- cImageLoader imgLoader;
- if (imgLoader.LoadIcon(icon, menuItemHeight-2)) {
- pixmapHeaderAudio->DrawImage(cPoint(1, 1), imgLoader.GetImage());
- }
+ cImage *imgIcon = imgCache->GetSkinIcon(*icon, menuItemHeight-2, menuItemHeight-2);
+ if (imgIcon)
+ pixmapHeaderAudio->DrawImage(cPoint(1,1), *imgIcon);
+
}
}
void cNopacityDisplayTracks::Flush(void) {
if (initial)
- if (config.tracksFadeTime)
+ if (FadeTime)
Start();
initial = false;
osd->Flush();
@@ -189,9 +186,9 @@ void cNopacityDisplayTracks::Action(void) {
for (cNopacityMenuItem *item = menuItems.First(); Running() && item; item = menuItems.Next(item)) {
item->SetAlpha(Alpha);
}
+ cPixmap::Unlock();
if (Running())
osd->Flush();
- cPixmap::Unlock();
int Delta = cTimeMs::Now() - Now;
if (Running() && (Delta < FrameTime))
cCondWait::SleepMs(FrameTime - Delta);
diff --git a/displaytracks.h b/displaytracks.h
index 171b808..05c5596 100644
--- a/displaytracks.h
+++ b/displaytracks.h
@@ -1,9 +1,14 @@
#ifndef __NOPACITY_DISPLAYTRACKS_H
#define __NOPACITY_DISPLAYTRACKS_H
+#include <vdr/skins.h>
+#include <vdr/thread.h>
+#include "menuitem.h"
+
class cNopacityDisplayTracks : public cSkinDisplayTracks, cThread {
private:
cOsd *osd;
+ cImageCache *imgCache;
int FrameTime;
int FadeTime;
int width, height;
@@ -18,18 +23,13 @@ private:
cPixmap *pixmapHeaderAudio;
cPixmap *pixmapIcon;
cList<cNopacityMenuItem> menuItems;
- int handleBackgrounds[2];
- cFont *font;
- cFont *fontHeader;
virtual void Action(void);
void SetItem(const char *Text, int Index, bool Current);
void SetGeometry(void);
void CreatePixmaps(void);
- void CreateFonts(void);
- void CreateBackgroundImages(void);
void DrawHeader(const char *Title);
public:
- cNopacityDisplayTracks(const char *Title, int NumTracks, const char * const *Tracks);
+ cNopacityDisplayTracks(cImageCache *imgCache, const char *Title, int NumTracks, const char * const *Tracks);
virtual ~cNopacityDisplayTracks();
virtual void SetTrack(int Index, const char * const *Tracks);
virtual void SetAudioChannel(int AudioChannel);
diff --git a/displayvolume.c b/displayvolume.c
index fcb8e25..1661e02 100644
--- a/displayvolume.c
+++ b/displayvolume.c
@@ -1,85 +1,99 @@
#include "symbols/mute.xpm"
#include "displayvolume.h"
-cNopacityDisplayVolume::cNopacityDisplayVolume(void) {
- config.setDynamicValues();
+#include "config.h"
+#include "helpers.h"
+
+cNopacityDisplayVolume::cNopacityDisplayVolume(cImageCache *imgCache) {
+ this->imgCache = imgCache;
initial = true;
muted = false;
- FrameTime = config.volumeFrameTime;
- FadeTime = config.volumeFadeTime;
-
- width = cOsd::OsdWidth() * config.volumeWidth / 100;
- height = cOsd::OsdHeight() * config.volumeHeight / 100;
-
- int top = (cOsd::OsdHeight() - height) - config.volumeBorderBottom;
- int left = (cOsd::OsdWidth() - width) / 2;
-
- osd = CreateOsd(left, top, width, height);
+ FadeTime = config.GetValue("volumeFadeTime");
+ FrameTime = FadeTime / 10;
- pixmapBackgroundTop = osd->CreatePixmap(1, cRect(0, 0, width, height/2));
- pixmapBackgroundBottom = osd->CreatePixmap(1, cRect(0, height/2, width, height/2));
+ int top = geoManager->osdTop + geoManager->osdHeight - geoManager->volumeHeight - config.GetValue("volumeBorderBottom");
+ int left = geoManager->osdLeft + (geoManager->osdWidth - geoManager->volumeWidth) / 2;
+ osd = CreateOsd(left, top, geoManager->volumeWidth, geoManager->volumeHeight);
- DrawBlendedBackground(pixmapBackgroundTop, Theme.Color(clrChannelBackground), Theme.Color(clrChannelBackBlend), true);
- DrawBlendedBackground(pixmapBackgroundBottom, Theme.Color(clrChannelBackground), Theme.Color(clrChannelBackBlend), false);
+ pixmapBackground = osd->CreatePixmap(1, cRect(0, 0, geoManager->volumeWidth, geoManager->volumeHeight));
- pixmapBackgroundTop->DrawEllipse(cRect(0, 0, height/4, height/4), clrTransparent, -2);
- pixmapBackgroundTop->DrawEllipse(cRect(width - height/4, 0, height/4, height/4), clrTransparent, -1);
- pixmapBackgroundBottom->DrawEllipse(cRect(0, height/4, height/4, height/4), clrTransparent, -3);
- pixmapBackgroundBottom->DrawEllipse(cRect(width - height/4, height/4, height/4, height/4), clrTransparent, -4);
-
- labelHeight = height/3;
- pixmapLabel = osd->CreatePixmap(2, cRect(0, 5, width, labelHeight));
- progressBarWidth = 0.9 * width;
- progressBarHeight = 0.3 * height;
- if (progressBarHeight%2 != 0)
- progressBarHeight++;
- pixmapProgressBar = osd->CreatePixmap(2, cRect((width - progressBarWidth) / 2, (height - progressBarHeight)*2/3, progressBarWidth, progressBarHeight));
+ if (config.GetValue("displayType") == dtGraphical) {
+ cImage *imgBack = imgCache->GetSkinElement(seVolumeBackground);
+ if (imgBack) {
+ pixmapBackground->DrawImage(cPoint(0, 0), *imgBack);
+ }
+ } else {
+ pixmapBackground->Fill(Theme.Color(clrChannelBackground));
+ if (config.GetValue("displayType") == dtBlending) {
+ DrawBlendedBackground(pixmapBackground,
+ 0,
+ geoManager->volumeWidth,
+ Theme.Color(clrChannelBackground),
+ Theme.Color(clrChannelBackBlend),
+ true);
+ DrawBlendedBackground(pixmapBackground,
+ 0,
+ geoManager->volumeWidth,
+ Theme.Color(clrChannelBackground),
+ Theme.Color(clrChannelBackBlend),
+ false);
+ }
+ int cornerRadius = geoManager->volumeHeight/4;
+ if (cornerRadius > 2) {
+ DrawRoundedCorners(pixmapBackground,
+ cornerRadius,
+ 0,
+ 0,
+ geoManager->volumeWidth,
+ geoManager->volumeHeight);
+ }
+ }
+ pixmapLabel = osd->CreatePixmap(2, cRect(0, 5, geoManager->volumeWidth, geoManager->volumeLabelHeight));
+ pixmapProgressBar = osd->CreatePixmap(2, cRect((geoManager->volumeWidth - geoManager->volumeProgressBarWidth) / 2, (geoManager->volumeHeight - geoManager->volumeProgressBarHeight)*2/3, geoManager->volumeProgressBarWidth, geoManager->volumeProgressBarHeight));
- if (config.volumeFadeTime) {
- pixmapBackgroundTop->SetAlpha(0);
- pixmapBackgroundBottom->SetAlpha(0);
+ if (FadeTime) {
+ pixmapBackground->SetAlpha(0);
pixmapProgressBar->SetAlpha(0);
pixmapLabel->SetAlpha(0);
}
- font = cFont::CreateFont(config.fontName, labelHeight - 6 + config.fontVolume);
}
cNopacityDisplayVolume::~cNopacityDisplayVolume() {
Cancel(-1);
while (Active())
cCondWait::SleepMs(10);
- osd->DestroyPixmap(pixmapBackgroundTop);
- osd->DestroyPixmap(pixmapBackgroundBottom);
+ osd->DestroyPixmap(pixmapBackground);
osd->DestroyPixmap(pixmapLabel);
osd->DestroyPixmap(pixmapProgressBar);
- delete font;
delete osd;
}
void cNopacityDisplayVolume::SetVolume(int Current, int Total, bool Mute) {
pixmapLabel->Fill(clrTransparent);
cString label = cString::sprintf("%s: %d", tr("Volume"), Current);
- pixmapLabel->DrawText(cPoint((width - font->Width(*label)) / 2, (labelHeight - font->Height()) / 2), *label, Theme.Color(clrVolumeFont), clrTransparent, font);
+ pixmapLabel->DrawText(cPoint((geoManager->volumeWidth - fontManager->volumeText->Width(*label)) / 2, (geoManager->volumeLabelHeight - fontManager->volumeText->Height()) / 2), *label, Theme.Color(clrVolumeFont), clrTransparent, fontManager->volumeText);
if (Mute) {
cBitmap bmMute(mute_xpm);
- pixmapLabel->DrawBitmap(cPoint(width - 2*bmMute.Width(), (labelHeight - bmMute.Height()) / 2), bmMute, Theme.Color(clrDiskAlert), clrTransparent);
+ pixmapLabel->DrawBitmap(cPoint(geoManager->volumeWidth - 2*bmMute.Width(), (geoManager->volumeLabelHeight - bmMute.Height()) / 2), bmMute, Theme.Color(clrDiskAlert), clrTransparent);
}
DrawProgressBar(Current, Total);
}
void cNopacityDisplayVolume::DrawProgressBar(int Current, int Total) {
pixmapProgressBar->Fill(clrTransparent);
+ if (geoManager->volumeProgressBarHeight < 5)
+ return;
double percent = ((double)Current) / (double)Total;
- int barWidth = progressBarWidth - progressBarHeight;
+ int barWidth = geoManager->volumeProgressBarWidth - geoManager->volumeProgressBarHeight;
if ((Current > 0) || (Total > 0)) {
- pixmapProgressBar->DrawEllipse(cRect(0, 0, progressBarHeight, progressBarHeight), Theme.Color(clrProgressBarBack));
- pixmapProgressBar->DrawEllipse(cRect(progressBarWidth - progressBarHeight, 0, progressBarHeight, progressBarHeight), Theme.Color(clrProgressBarBack));
- pixmapProgressBar->DrawRectangle(cRect(progressBarHeight/2, 0, progressBarWidth - progressBarHeight, progressBarHeight), Theme.Color(clrProgressBarBack));
+ pixmapProgressBar->DrawEllipse(cRect(0, 0, geoManager->volumeProgressBarHeight, geoManager->volumeProgressBarHeight), Theme.Color(clrProgressBarBack));
+ pixmapProgressBar->DrawEllipse(cRect(geoManager->volumeProgressBarWidth - geoManager->volumeProgressBarHeight, 0, geoManager->volumeProgressBarHeight, geoManager->volumeProgressBarHeight), Theme.Color(clrProgressBarBack));
+ pixmapProgressBar->DrawRectangle(cRect(geoManager->volumeProgressBarHeight/2, 0, geoManager->volumeProgressBarWidth - geoManager->volumeProgressBarHeight, geoManager->volumeProgressBarHeight), Theme.Color(clrProgressBarBack));
- pixmapProgressBar->DrawEllipse(cRect(1, 1, progressBarHeight-2, progressBarHeight-2), Theme.Color(clrProgressBarBlend));
+ pixmapProgressBar->DrawEllipse(cRect(1, 1, geoManager->volumeProgressBarHeight-2, geoManager->volumeProgressBarHeight-2), Theme.Color(clrProgressBarBlend));
if (Current > 0) {
- tColor colAct = DrawProgressbarBackground(progressBarHeight / 2 - 1, 1, barWidth * percent - 2, progressBarHeight - 2);
- pixmapProgressBar->DrawEllipse(cRect(barWidth * percent, 1, progressBarHeight-2, progressBarHeight-2), colAct);
+ tColor colAct = DrawProgressbarBackground(geoManager->volumeProgressBarHeight / 2 - 1, 1, barWidth * percent - 2, geoManager->volumeProgressBarHeight - 2);
+ pixmapProgressBar->DrawEllipse(cRect(barWidth * percent, 1, geoManager->volumeProgressBarHeight-2, geoManager->volumeProgressBarHeight-2), colAct);
}
}
}
@@ -117,7 +131,7 @@ tColor cNopacityDisplayVolume::DrawProgressbarBackground(int left, int top, int
void cNopacityDisplayVolume::Flush(void) {
if (initial)
- if (config.volumeFadeTime)
+ if (FadeTime)
Start();
initial = false;
osd->Flush();
@@ -130,13 +144,12 @@ void cNopacityDisplayVolume::Action(void) {
cPixmap::Lock();
double t = min(double(Now - Start) / FadeTime, 1.0);
int Alpha = t * ALPHA_OPAQUE;
- pixmapBackgroundTop->SetAlpha(Alpha);
- pixmapBackgroundBottom->SetAlpha(Alpha);
+ pixmapBackground->SetAlpha(Alpha);
pixmapProgressBar->SetAlpha(Alpha);
pixmapLabel->SetAlpha(Alpha);
+ cPixmap::Unlock();
if (Running())
osd->Flush();
- cPixmap::Unlock();
int Delta = cTimeMs::Now() - Now;
if (Running() && (Delta < FrameTime))
cCondWait::SleepMs(FrameTime - Delta);
diff --git a/displayvolume.h b/displayvolume.h
index 707bca3..a3d66cc 100644
--- a/displayvolume.h
+++ b/displayvolume.h
@@ -1,29 +1,29 @@
#ifndef __NOPACITY_DISPLAYVOLUME_H
#define __NOPACITY_DISPLAYVOLUME_H
+#include <vdr/skins.h>
+#include <vdr/thread.h>
+#include "imagecache.h"
+
class cNopacityDisplayVolume : public cSkinDisplayVolume, cThread {
private:
int FrameTime;
int FadeTime;
bool initial;
bool muted;
- int width, height;
- int labelHeight;
- int progressBarWidth, progressBarHeight;
cOsd *osd;
- cPixmap *pixmapBackgroundTop;
- cPixmap *pixmapBackgroundBottom;
+ cImageCache *imgCache;
+ cPixmap *pixmapBackground;
cPixmap *pixmapProgressBar;
cPixmap *pixmapLabel;
- cFont *font;
virtual void Action(void);
void DrawProgressBar(int Current, int Total);
tColor DrawProgressbarBackground(int left, int top, int width, int height);
public:
- cNopacityDisplayVolume(void);
+ cNopacityDisplayVolume(cImageCache *imgCache);
virtual ~cNopacityDisplayVolume();
virtual void SetVolume(int Current, int Total, bool Mute);
virtual void Flush(void);
};
-
+
#endif //__NOPACITY_DISPLAYVOLUME_H
\ No newline at end of file
diff --git a/fontmanager.c b/fontmanager.c
new file mode 100644
index 0000000..0ef4bb1
--- /dev/null
+++ b/fontmanager.c
@@ -0,0 +1,135 @@
+#include "fontmanager.h"
+#include "geometrymanager.h"
+#include "config.h"
+
+
+cFontManager::cFontManager() {
+}
+
+cFontManager::~cFontManager() {
+ DeleteFonts();
+}
+
+void cFontManager::SetFonts() {
+ SetFontsMenu();
+ SetFontsChannel();
+ SetFontsReplay();
+ SetFontsMessage();
+ SetFontsTrack();
+ SetFontsVolume();
+}
+
+void cFontManager::DeleteFonts() {
+ DeleteFontsMenu();
+ DeleteFontsChannel();
+ DeleteFontsReplay();
+ DeleteFontsMessage();
+ DeleteFontsTrack();
+ DeleteFontsVolume();
+}
+
+cFont *cFontManager::CreateFont(int size) {
+ return cFont::CreateFont(config.fontName, size);
+}
+
+void cFontManager::SetFontsMenu(void) {
+ menuHeader = CreateFont(geoManager->menuHeaderHeight / 2 + config.GetValue("fontHeader"));
+ menuDate = CreateFont(geoManager->menuHeaderHeight / 2 + config.GetValue("fontDate"));
+ menuItemLarge = CreateFont(geoManager->menuItemHeightMain/3 + 4 + config.GetValue("fontMenuitemLarge"));
+ menuItemSchedule = CreateFont(geoManager->menuItemHeightSchedule / 4 + 5 + config.GetValue("fontMenuitemSchedule"));
+ menuItemScheduleSmall = CreateFont(geoManager->menuItemHeightSchedule / 4 - 5 + config.GetValue("fontMenuitemScheduleSmall"));
+ menuItemChannel = CreateFont(geoManager->menuItemHeightSchedule / 3 + config.GetValue("fontMenuitemChannel"));
+ menuItemChannelSmall = CreateFont(geoManager->menuItemHeightSchedule / 5 - 2 + config.GetValue("fontMenuitemChannelSmall"));
+ menuItemRecordings = CreateFont(geoManager->menuItemHeightRecordings / 2 - 14 + config.GetValue("fontMenuitemRecordings"));
+ menuItemRecordingsSmall = CreateFont(geoManager->menuItemHeightRecordings / 4 - 3 + config.GetValue("fontMenuitemRecordingsSmall"));
+ menuItemTimers = CreateFont(geoManager->menuItemHeightSchedule / 3 + config.GetValue("fontMenuitemTimers"));
+ menuItemTimersSmall = CreateFont(geoManager->menuItemHeightSchedule / 4 - 3 + config.GetValue("fontMenuitemTimersSmall"));
+ menuItemDefault = CreateFont(geoManager->menuItemHeightDefault * 2 / 3 + config.GetValue("fontMenuitemDefault"));
+ menuDiskUsage = CreateFont(geoManager->menuDiskUsageHeight/6 - 2 + config.GetValue("fontDiskUsage"));
+ menuDiskUsagePercent = CreateFont(geoManager->menuDiskUsageHeight/5 - 4 + config.GetValue("fontDiskUsagePercent"));
+ menuTimersHead = CreateFont((geoManager->menuContentHeight - 3*geoManager->menuSpace - geoManager->menuDiskUsageHeight) / 25 + config.GetValue("fontTimersHead"));
+ menuTimers = CreateFont((geoManager->menuContentHeight - 3*geoManager->menuSpace - geoManager->menuDiskUsageHeight) / 25 - 6 + config.GetValue("fontTimers"));
+ menuButtons = CreateFont(geoManager->menuButtonHeight*0.8 + config.GetValue("fontButtons"));
+ menuMessage = CreateFont(geoManager->menuMessageHeight / 3 + config.GetValue("fontMessageMenu"));
+ menuEPGInfoWindow = CreateFont(geoManager->menuContentHeight / 30 + config.GetValue("fontEPGInfoWindow"));
+ menuEPGInfoWindowLarge = CreateFont(geoManager->menuContentHeight / 20 + config.GetValue("fontEPGInfoWindowLarge"));
+}
+
+void cFontManager::DeleteFontsMenu(void) {
+ delete menuHeader;
+ delete menuDate;
+ delete menuItemLarge;
+ delete menuItemSchedule;
+ delete menuItemScheduleSmall;
+ delete menuItemChannel;
+ delete menuItemChannelSmall;
+ delete menuItemRecordings;
+ delete menuItemRecordingsSmall;
+ delete menuItemTimers;
+ delete menuItemTimersSmall;
+ delete menuItemDefault;
+ delete menuDiskUsage;
+ delete menuDiskUsagePercent;
+ delete menuTimers;
+ delete menuTimersHead;
+ delete menuButtons;
+ delete menuMessage;
+ delete menuEPGInfoWindow;
+ delete menuEPGInfoWindowLarge;
+}
+
+void cFontManager::SetFontsChannel(void) {
+ channelHeader = CreateFont(geoManager->channelHeaderHeight - 8 + config.GetValue("fontChannelHeaderSize"));
+ channelDate = CreateFont(geoManager->channelHeaderHeight/2 + config.GetValue("fontChannelDateSize"));
+ channelEPG = CreateFont(geoManager->channelEpgInfoLineHeight + config.GetValue("fontEPGSize"));
+ channelEPGSmall = CreateFont(geoManager->channelEpgInfoLineHeight - 6 + config.GetValue("fontEPGSmallSize"));
+ channelSourceInfo = CreateFont(geoManager->channelFooterHeight/2 + config.GetValue("fontChannelSourceInfoSize"));;
+ channelChannelGroup = CreateFont(geoManager->channelEpgInfoHeight/3 + config.GetValue("fontChannelGroupSize"));
+ channelChannelGroupSmall = CreateFont(geoManager->channelEpgInfoHeight/3 - 5 + config.GetValue("fontChannelGroupSmallSize"));
+}
+
+void cFontManager::DeleteFontsChannel(void) {
+ delete channelHeader;
+ delete channelDate;
+ delete channelEPG;
+ delete channelEPGSmall;
+ delete channelSourceInfo;
+ delete channelChannelGroup;
+ delete channelChannelGroupSmall;
+}
+
+void cFontManager::SetFontsReplay(void) {
+ replayHeader = CreateFont(geoManager->replayHeaderHeight - 8 + config.GetValue("fontReplayHeader"));
+ replayText = CreateFont(geoManager->replayCurrentHeight);
+}
+
+void cFontManager::DeleteFontsReplay(void) {
+ delete replayHeader;
+ delete replayText;
+}
+
+void cFontManager::SetFontsMessage(void) {
+ messageText = CreateFont(geoManager->messageHeight / 4 + 15 + config.GetValue("fontMessage"));
+}
+
+void cFontManager::DeleteFontsMessage(void) {
+ delete messageText;
+}
+
+void cFontManager::SetFontsTrack(void) {
+ trackText = CreateFont(geoManager->menuItemHeightTracks/3 + config.GetValue("fontTracks"));
+ trackHeader = CreateFont(geoManager->menuItemHeightTracks/2 + config.GetValue("fontTracksHeader"));
+}
+
+void cFontManager::DeleteFontsTrack(void) {
+ delete trackText;
+ delete trackHeader;
+}
+
+void cFontManager::SetFontsVolume(void) {
+ volumeText = CreateFont(geoManager->volumeLabelHeight - 6 + config.GetValue("fontVolume"));
+}
+
+void cFontManager::DeleteFontsVolume(void) {
+ delete volumeText;
+}
\ No newline at end of file
diff --git a/fontmanager.h b/fontmanager.h
new file mode 100644
index 0000000..28d2a45
--- /dev/null
+++ b/fontmanager.h
@@ -0,0 +1,67 @@
+#ifndef __NOPACITY_FONTMANAGER_H
+#define __NOPACITY_FONTMANAGER_H
+
+#include <vdr/skins.h>
+
+class cFontManager {
+ private:
+ void SetFontsMenu(void);
+ void DeleteFontsMenu(void);
+ void SetFontsChannel(void);
+ void DeleteFontsChannel(void);
+ void SetFontsReplay(void);
+ void DeleteFontsReplay(void);
+ void SetFontsMessage(void);
+ void DeleteFontsMessage(void);
+ void SetFontsTrack(void);
+ void DeleteFontsTrack(void);
+ void SetFontsVolume(void);
+ void DeleteFontsVolume(void);
+ public:
+ cFontManager();
+ ~cFontManager();
+ cFont *CreateFont(int size);
+ void SetFonts(void);
+ void DeleteFonts(void);
+ //Fonts DisplayMenu
+ cFont *menuHeader;
+ cFont *menuDate;
+ cFont *menuItemLarge;
+ cFont *menuItemSchedule;
+ cFont *menuItemScheduleSmall;
+ cFont *menuItemChannel;
+ cFont *menuItemChannelSmall;
+ cFont *menuItemRecordings;
+ cFont *menuItemRecordingsSmall;
+ cFont *menuItemTimers;
+ cFont *menuItemTimersSmall;
+ cFont *menuItemDefault;
+ cFont *menuDiskUsage;
+ cFont *menuDiskUsagePercent;
+ cFont *menuTimers;
+ cFont *menuTimersHead;
+ cFont *menuButtons;
+ cFont *menuMessage;
+ cFont *menuEPGInfoWindow;
+ cFont *menuEPGInfoWindowLarge;
+ //Fonts DisplayChannel
+ cFont *channelHeader;
+ cFont *channelDate;
+ cFont *channelEPG;
+ cFont *channelEPGSmall;
+ cFont *channelSourceInfo;
+ cFont *channelChannelGroup;
+ cFont *channelChannelGroupSmall;
+ //Fonts DisplayReplay
+ cFont *replayHeader;
+ cFont *replayText;
+ //Fonts DisplayMessage
+ cFont *messageText;
+ //Fonts DisplayTracks
+ cFont *trackText;
+ cFont *trackHeader;
+ //Fonts DisplayVolume
+ cFont *volumeText;
+};
+
+#endif //__NOPACITY_FONTMANAGER_H
\ No newline at end of file
diff --git a/geometrymanager.c b/geometrymanager.c
new file mode 100644
index 0000000..0c0b938
--- /dev/null
+++ b/geometrymanager.c
@@ -0,0 +1,227 @@
+#include "geometrymanager.h"
+#include "config.h"
+#include "helpers.h"
+#include <vdr/osd.h>
+
+cGeometryManager::cGeometryManager() {
+ SetOSDSize();
+}
+
+cGeometryManager::~cGeometryManager() {
+}
+
+void cGeometryManager::SetOSDSize(void) {
+ osdWidth = cOsd::OsdWidth();
+ osdHeight = cOsd::OsdHeight();
+ osdLeft = cOsd::OsdLeft();
+ osdTop = cOsd::OsdTop();
+}
+
+void cGeometryManager::SetGeometry(void) {
+ SetDisplayMenuSizes();
+ SetDisplayChannelSizes();
+ SetDisplayReplaySizes();
+ SetDisplayMessageSizes();
+ SetDisplayTrackSizes();
+ SetDisplayVolumeSizes();
+}
+
+bool cGeometryManager::GeometryChanged(void) {
+ if ((osdWidth != cOsd::OsdWidth()) ||
+ (osdHeight != cOsd::OsdHeight()) ||
+ (osdLeft != cOsd::OsdLeft()) ||
+ (osdTop != cOsd::OsdTop())) {
+ dsyslog("nopacity: osd Size changed");
+ dsyslog("nopacity: old osd size: top %d left %d size %d * %d", osdLeft, osdTop, osdWidth, osdHeight);
+ SetOSDSize();
+ dsyslog("nopacity: new osd size: top %d left %d size %d * %d", osdLeft, osdTop, osdWidth, osdHeight);
+ return true;
+ }
+ return false;
+}
+
+void cGeometryManager::SetDisplayMenuSizes() {
+ menuSpace = config.GetValue("spaceMenu");
+
+ menuWidthScrollbar = config.GetValue("widthScrollbar");
+ menuDateWidth = osdWidth * 0.3;
+
+ menuHeaderHeight = osdHeight * config.GetValue("headerHeight") / 100;
+ menuFooterHeight = osdHeight * config.GetValue("footerHeight") / 100;
+ menuContentHeight = osdHeight - menuHeaderHeight - menuFooterHeight;
+
+ menuContentWidthMain = osdWidth * config.GetValue("menuWidthMain") / 100;
+ menuContentWidthSchedules = osdWidth * config.GetValue("menuWidthSchedules") / 100;
+ menuContentWidthChannels = osdWidth * config.GetValue("menuWidthChannels") / 100;
+ menuContentWidthTimers = osdWidth * config.GetValue("menuWidthTimers") / 100;
+ menuContentWidthRecordings = osdWidth * config.GetValue("menuWidthRecordings") / 100;
+ menuContentWidthSetup = osdWidth * config.GetValue("menuWidthSetup") / 100;
+ menuContentWidthFull = osdWidth - config.GetValue("widthScrollbar") - config.GetValue("spaceMenu");
+ menuContentWidthMinimum = Minimum(menuContentWidthMain,
+ menuContentWidthSchedules,
+ menuContentWidthChannels,
+ menuContentWidthTimers,
+ menuContentWidthRecordings,
+ menuContentWidthSetup);
+
+ menuItemWidthDefault = menuContentWidthFull - 4 * config.GetValue("spaceMenu");
+ menuItemWidthMain = menuContentWidthMain - 4 * config.GetValue("spaceMenu");
+ menuItemWidthSchedule = menuContentWidthSchedules - 4 * config.GetValue("spaceMenu");
+ menuItemWidthChannel = menuContentWidthChannels - 4 * config.GetValue("spaceMenu");
+ menuItemWidthTimer = menuContentWidthTimers - 4 * config.GetValue("spaceMenu");
+ menuItemWidthRecording = menuContentWidthRecordings - 4 * config.GetValue("spaceMenu");
+ menuItemWidthSetup = menuContentWidthSetup - 4 * config.GetValue("spaceMenu");
+ menuItemWidthTracks = osdWidth * config.GetValue("tracksWidth") / 100 - 4;
+ menuItemHeightMain = menuContentHeight / config.GetValue("numMainMenuItems") - config.GetValue("spaceMenu");
+ menuItemHeightSchedule = menuContentHeight / config.GetValue("numSchedulesMenuItems") - config.GetValue("spaceMenu");;
+ menuItemHeightDefault = menuContentHeight / config.GetValue("numDefaultMenuItems") - config.GetValue("spaceMenu");
+ menuItemHeightRecordings = menuContentHeight / config.GetValue("numRecordingsMenuItems") - config.GetValue("spaceMenu");
+ menuItemHeightTracks = config.GetValue("tracksItemHeight");
+
+ menuMainMenuIconSize = menuItemHeightMain - 2 * menuSpace;
+ cSize logoSize = ScaleToFit(1000,
+ menuItemHeightSchedule - 2,
+ config.GetValue("logoWidthOriginal"),
+ config.GetValue("logoHeightOriginal"));
+ menuLogoWidth = logoSize.Width();
+ menuLogoHeight = logoSize.Height();
+
+ cSize logoSizeVDRHeader = ScaleToFit(1000,
+ menuHeaderHeight - 4,
+ config.GetValue("menuHeaderLogoWidth"),
+ config.GetValue("menuHeaderLogoHeight"));
+ menuHeaderVDRLogoWidth = logoSizeVDRHeader.Width();
+
+ menuButtonsBorder = menuFooterHeight / 6;
+ menuButtonWidth = (osdWidth / 4) - 2 * menuButtonsBorder;
+ menuButtonHeight = menuFooterHeight - 3 * menuButtonsBorder;
+
+ menuDiskUsageWidth = menuDiskUsageHeight = osdWidth * config.GetValue("menuSizeDiskUsage") / 100;
+ menuTimersWidth = osdWidth * config.GetValue("menuWidthRightItems") / 100;
+ cSize timersLogoSize = ScaleToFit(menuTimersWidth * config.GetValue("timersLogoWidth") / 100,
+ 1000,
+ config.GetValue("logoWidthOriginal"),
+ config.GetValue("logoHeightOriginal"));
+ menuTimersLogoWidth = timersLogoSize.Width();
+ menuTimersLogoHeight = timersLogoSize.Height();
+
+ menuMessageWidth = 0.8 * osdWidth;
+ menuMessageHeight = 0.1 * osdHeight;
+}
+
+void cGeometryManager::SetDisplayChannelSizes(void) {
+ channelX = config.GetValue("channelBorderVertical");
+ channelWidth = osdWidth - 2 * config.GetValue("channelBorderVertical");
+ channelHeight = osdHeight * config.GetValue("channelHeight") / 100;
+ channelTop = osdHeight - channelHeight - config.GetValue("channelBorderBottom");
+
+ channelHeaderHeight = 0.2 * channelHeight;
+ channelFooterHeight = 0.2 * channelHeight;
+ channelContentHeight = channelHeight - channelHeaderHeight - channelFooterHeight;
+
+ int logoWidthTotalPercent = 16;
+ channelLogoWidthTotal = logoWidthTotalPercent * channelWidth /100;
+
+ int logoMaxWidth = logoMaxWidth = channelLogoWidthTotal - 10;
+ int logoMaxHeight;
+ if (config.GetValue("displayType") == dtGraphical) {
+ logoMaxHeight = channelHeight - channelHeaderHeight - 2;
+ } else {
+ logoMaxHeight = channelHeight - 2;
+ }
+ cSize logoSize = ScaleToFit(logoMaxWidth,
+ logoMaxHeight,
+ config.GetValue("logoWidthOriginal"),
+ config.GetValue("logoHeightOriginal"));
+ channelLogoWidth = logoSize.Width();
+ channelLogoHeight = logoSize.Height();
+ channelLogoX = (channelLogoWidthTotal - channelLogoWidth) / 2;
+
+ switch (config.GetValue("logoVerticalAlignment")) {
+ case lvTop:
+ channelLogoY = channelTop + (channelHeight - channelHeaderHeight - channelLogoHeight)/2;
+ break;
+ case lvMiddle:
+ channelLogoY = channelTop + (channelHeight - channelLogoHeight)/2;
+ break;
+ case lvBottom:
+ channelLogoY = (channelTop + channelHeaderHeight) + (channelHeight - channelHeaderHeight - channelLogoHeight)/2;
+ break;
+ }
+
+ switch (config.GetValue("logoPosition")) {
+ case lpLeft:
+ channelContentX = channelLogoWidthTotal;
+ channelContentWidth = channelWidth - channelLogoWidthTotal;
+ break;
+ case lpRight:
+ channelContentX = 0;
+ channelContentWidth = channelWidth - channelLogoWidthTotal;
+ channelLogoX = channelContentWidth;
+ break;
+ case lpNone:
+ channelContentX = 0;
+ channelContentWidth = channelWidth;
+ break;
+ }
+
+ channelChannelNameWidth = channelContentWidth * 70 / 100;
+ channelDateWidth = channelContentWidth - channelChannelNameWidth;
+ channelProgressBarHeight = channelHeight * 0.1;
+ channelEpgInfoHeight = channelContentHeight - channelProgressBarHeight;
+ channelEpgInfoLineHeight = channelEpgInfoHeight / 4;
+ channelFooterY = channelTop + channelHeaderHeight + channelContentHeight;
+}
+
+void cGeometryManager::SetDisplayReplaySizes(void) {
+ replayHeight = osdHeight * config.GetValue("replayHeight") / 100;
+ replayWidth = osdWidth - 2 * config.GetValue("replayBorderVertical");
+ replayHeaderHeight = replayHeight * 0.2;
+ if (replayHeaderHeight%2 != 0)
+ replayHeaderHeight++;
+ replayFooterHeight = replayHeaderHeight;
+ replayResolutionSize = replayHeaderHeight - 10;
+ replayResolutionX = replayWidth - replayResolutionSize*3 - replayHeaderHeight/2;
+ replayResolutionY = replayHeight - replayFooterHeight;
+ replayInfo2Height = replayHeaderHeight;
+ replayProgressBarHeight = 0.1 * replayHeight;
+ if (replayProgressBarHeight%2 != 0)
+ replayProgressBarHeight++;
+ replayCurrentHeight = replayProgressBarHeight + config.GetValue("fontReplay");
+ replayControlsHeight = replayHeight - replayHeaderHeight - replayInfo2Height - replayFooterHeight - replayProgressBarHeight;
+ if (replayControlsHeight < 11)
+ replayControlsHeight = 11;
+ replayInfoWidth = 0.75 * replayWidth;
+ replayDateWidth = replayWidth - replayInfoWidth;
+
+ replayJumpX = (replayWidth - 4 * replayControlsHeight)/2 + 5*replayControlsHeight;
+ replayJumpY = replayHeaderHeight + replayInfo2Height + replayProgressBarHeight;
+ replayJumpWidth = replayWidth - replayJumpX;
+ replayJumpHeight = replayControlsHeight;
+
+ replayIconBorder = 5;
+ replayIconSize = min(replayControlsHeight - 2*replayIconBorder, 128);
+
+ replayMessageY = replayHeight - replayFooterHeight;
+ replayMessageWidth = replayWidth * 75 / 100;
+ replayMessageHeight = replayFooterHeight;
+}
+
+void cGeometryManager::SetDisplayMessageSizes(void) {
+ messageWidth = osdWidth * config.GetValue("messageWidth") / 100;
+ messageHeight = osdHeight * config.GetValue("messageHeight") / 100;
+}
+
+void cGeometryManager::SetDisplayTrackSizes(void) {
+ trackWidth = osdWidth * config.GetValue("tracksWidth") / 100;
+}
+
+void cGeometryManager::SetDisplayVolumeSizes(void) {
+ volumeWidth = osdWidth * config.GetValue("volumeWidth") / 100;
+ volumeHeight = osdHeight * config.GetValue("volumeHeight") / 100;
+ volumeLabelHeight = volumeHeight/3;
+ volumeProgressBarWidth = 0.9 * volumeWidth;
+ volumeProgressBarHeight = 0.3 * volumeHeight;
+ if (volumeProgressBarHeight%2 != 0)
+ volumeProgressBarHeight++;
+}
diff --git a/geometrymanager.h b/geometrymanager.h
new file mode 100644
index 0000000..9d0c387
--- /dev/null
+++ b/geometrymanager.h
@@ -0,0 +1,115 @@
+#ifndef __NOPACITY_GEOMETRYMANAGER_H
+#define __NOPACITY_GEOMETRYMANAGER_H
+
+enum eLogoPosition {lpNone = 0, lpLeft, lpRight};
+enum eLogoVerticalPosition {lvTop = 0, lvMiddle, lvBottom};
+enum eBackgroundStyle {bsTrans = 0, bsFull};
+
+class cGeometryManager {
+ private:
+ void SetOSDSize(void);
+ void SetDisplayMenuSizes(void);
+ void SetDisplayChannelSizes(void);
+ void SetDisplayReplaySizes(void);
+ void SetDisplayMessageSizes(void);
+ void SetDisplayTrackSizes(void);
+ void SetDisplayVolumeSizes(void);
+ public:
+ cGeometryManager();
+ ~cGeometryManager();
+ void SetGeometry(void);
+ bool GeometryChanged(void);
+ int osdWidth;
+ int osdHeight;
+ int osdLeft;
+ int osdTop;
+ //DisplayMenu Sizes
+ int menuSpace;
+ int menuWidthScrollbar;
+ int menuDateWidth;
+ int menuHeaderHeight;
+ int menuFooterHeight;
+ int menuContentHeight;
+ int menuContentWidthMain;
+ int menuContentWidthSchedules;
+ int menuContentWidthChannels;
+ int menuContentWidthTimers;
+ int menuContentWidthRecordings;
+ int menuContentWidthSetup;
+ int menuContentWidthFull;
+ int menuContentWidthMinimum;
+ int menuItemWidthDefault;
+ int menuItemWidthMain;
+ int menuItemWidthSchedule;
+ int menuItemWidthChannel;
+ int menuItemWidthTimer;
+ int menuItemWidthRecording;
+ int menuItemWidthSetup;
+ int menuItemWidthTracks;
+ int menuItemHeightMain;
+ int menuItemHeightSchedule;
+ int menuItemHeightDefault;
+ int menuItemHeightRecordings;
+ int menuItemHeightTracks;
+ int menuMainMenuIconSize;
+ int menuLogoWidth;
+ int menuLogoHeight;
+ int menuTimersLogoWidth;
+ int menuTimersLogoHeight;
+ int menuHeaderVDRLogoWidth;
+ int menuButtonsBorder;
+ int menuButtonWidth;
+ int menuButtonHeight;
+ int menuDiskUsageWidth;
+ int menuDiskUsageHeight;
+ int menuTimersWidth;
+ int menuMessageWidth;
+ int menuMessageHeight;
+ //DisplayChannel Sizes
+ int channelX, channelTop;
+ int channelWidth, channelHeight;
+ int channelHeaderHeight;
+ int channelFooterHeight;
+ int channelContentHeight;
+ int channelContentX, channelContentWidth;
+ int channelLogoWidthTotal;
+ int channelLogoX, channelLogoY;
+ int channelLogoWidth, channelLogoHeight;
+ int channelChannelNameWidth;
+ int channelDateWidth;
+ int channelFooterY;
+ int channelProgressBarHeight;
+ int channelEpgInfoHeight;
+ int channelEpgInfoLineHeight;
+ //DisplayReplay Sizes
+ int replayWidth;
+ int replayHeight;
+ int replayHeaderHeight;
+ int replayInfo2Height;
+ int replayProgressBarHeight;
+ int replayCurrentHeight;
+ int replayControlsHeight;
+ int replayFooterHeight;
+ int replayInfoWidth;
+ int replayDateWidth;
+ int replayIconSize, replayIconBorder;
+ int replayResolutionSize;
+ int replayResolutionX, replayResolutionY;
+ int replayJumpX, replayJumpY;
+ int replayJumpWidth, replayJumpHeight;
+ int replayMessageY;
+ int replayMessageWidth, replayMessageHeight;
+ //DisplayMessage Sizes
+ int messageWidth;
+ int messageHeight;
+ //DisplayTracks Sizes
+ int trackWidth;
+ //DisplayVolume Sizes
+ int volumeWidth;
+ int volumeHeight;
+ int volumeLabelHeight;
+ int volumeProgressBarWidth;
+ int volumeProgressBarHeight;
+};
+
+#endif //__NOPACITY_GEOMETRYMANAGER_H
\ No newline at end of file
diff --git a/helpers.c b/helpers.c
index 425ebd6..d4ed0bd 100644
--- a/helpers.c
+++ b/helpers.c
@@ -1,23 +1,26 @@
-static cOsd *CreateOsd(int Left, int Top, int Width, int Height) {
+#include <string>
+#include <sstream>
+#include <vector>
+#include "helpers.h"
+#include <vdr/skins.h>
+
+cOsd *CreateOsd(int Left, int Top, int Width, int Height) {
cOsd *osd = cOsdProvider::NewOsd(Left, Top);
if (osd) {
tArea Area = { 0, 0, Width, Height, 32 };
- if (osd->SetAreas(&Area, 1) == oeOk) {
+ if (osd->SetAreas(&Area, 1) == oeOk) {
return osd;
}
}
return NULL;
}
-static void DrawBlendedBackground(cPixmap *pixmap, tColor color, tColor colorBlending, bool fromTop) {
- int width = pixmap->ViewPort().Width();
+void DrawBlendedBackground(cPixmap *pixmap, int xStart, int width, tColor color, tColor colorBlending, bool fromTop) {
int height = pixmap->ViewPort().Height();
- pixmap->Fill(color);
int numSteps = 16;
int alphaStep = 0x0F;
int alpha = 0x00;
int step, begin, end;
- bool cont = true;
if (fromTop) {
step = 1;
begin = 0;
@@ -28,16 +31,69 @@ static void DrawBlendedBackground(cPixmap *pixmap, tColor color, tColor colorBle
end = height - numSteps;
}
tColor clr;
+ bool cont = true;
for (int i = begin; cont; i = i + step) {
clr = AlphaBlend(color, colorBlending, alpha);
- pixmap->DrawRectangle(cRect(0,i,width,1), clr);
+ pixmap->DrawRectangle(cRect(xStart,i,width,1), clr);
alpha += alphaStep;
- if (i == end)
+ if (i == end)
cont = false;
}
}
-static int Minimum(int a, int b, int c, int d, int e, int f) {
+void DrawRoundedCorners(cPixmap *p, int radius, int x, int y, int width, int height) {
+ if (radius > 2) {
+ p->DrawEllipse(cRect(x, y, radius, radius), clrTransparent, -2);
+ p->DrawEllipse(cRect(x + width - radius, y , radius, radius), clrTransparent, -1);
+ p->DrawEllipse(cRect(x, y + height - radius, radius, radius), clrTransparent, -3);
+ p->DrawEllipse(cRect(x + width - radius, y + height - radius, radius, radius), clrTransparent, -4);
+ }
+}
+
+void DrawRoundedCornersWithBorder(cPixmap *p, tColor borderColor, int radius, int width, int height) {
+ if (radius < 3)
+ return;
+ p->DrawEllipse(cRect(0,0,radius,radius), borderColor, -2);
+ p->DrawEllipse(cRect(-1,-1,radius,radius), clrTransparent, -2);
+
+ p->DrawEllipse(cRect(width-radius,0,radius,radius), borderColor, -1);
+ p->DrawEllipse(cRect(width-radius+1,-1,radius,radius), clrTransparent, -1);
+
+ p->DrawEllipse(cRect(0,height-radius,radius,radius), borderColor, -3);
+ p->DrawEllipse(cRect(-1,height-radius+1,radius,radius), clrTransparent, -3);
+
+ p->DrawEllipse(cRect(width-radius,height-radius,radius,radius), borderColor, -4);
+ p->DrawEllipse(cRect(width-radius+1,height-radius+1,radius,radius), clrTransparent, -4);
+}
+
+cSize ScaleToFit(int widthMax, int heightMax, int widthOriginal, int heightOriginal) {
+ int width = 1;
+ int height = 1;
+
+ if ((widthMax == 0)||(heightMax==0)||(widthOriginal==0)||(heightOriginal==0))
+ return cSize(width, height);
+
+ if ((widthOriginal <= widthMax) && (heightOriginal <= heightMax)) {
+ width = widthOriginal;
+ height = heightOriginal;
+ } else if ((widthOriginal > widthMax) && (heightOriginal <= heightMax)) {
+ width = widthMax;
+ height = (double)width/(double)widthOriginal * heightOriginal;
+ } else if ((widthOriginal <= widthMax) && (heightOriginal > heightMax)) {
+ height = heightMax;
+ width = (double)height/(double)heightOriginal * widthOriginal;
+ } else {
+ width = widthMax;
+ height = (double)width/(double)widthOriginal * heightOriginal;
+ if (height > heightMax) {
+ height = heightMax;
+ width = (double)height/(double)heightOriginal * widthOriginal;
+ }
+ }
+ return cSize(width, height);
+}
+
+int Minimum(int a, int b, int c, int d, int e, int f) {
int min = a;
if (b < min) min = b;
if (c < min) min = c;
@@ -45,4 +101,71 @@ static int Minimum(int a, int b, int c, int d, int e, int f) {
if (e < min) min = e;
if (f < min) min = f;
return min;
-}
\ No newline at end of file
+}
+
+std::string CutText(std::string text, int width, const cFont *font) {
+ if (width <= font->Size())
+ return text.c_str();
+ cTextWrapper twText;
+ twText.Set(text.c_str(), font, width);
+ std::string cuttedTextNative = twText.GetLine(0);
+ std::stringstream sstrText;
+ sstrText << cuttedTextNative << "...";
+ std::string cuttedText = sstrText.str();
+ int actWidth = font->Width(cuttedText.c_str());
+ if (actWidth > width) {
+ int overlap = actWidth - width;
+ int charWidth = font->Width(".");
+ if (charWidth == 0)
+ charWidth = 1;
+ int cutChars = overlap / charWidth;
+ if (cutChars > 0) {
+ cuttedTextNative = cuttedTextNative.substr(0, cuttedTextNative.length() - cutChars);
+ std::stringstream sstrText2;
+ sstrText2 << cuttedTextNative << "...";
+ cuttedText = sstrText2.str();
+ }
+ }
+ return cuttedText;
+}
+
+std::string StrToLowerCase(std::string str) {
+ std::string lowerCase = str;
+ const int length = lowerCase.length();
+ for(int i=0; i < length; ++i) {
+ lowerCase[i] = std::tolower(lowerCase[i]);
+ }
+ return lowerCase;
+}
+
+// split: receives a char delimiter; returns a vector of strings
+// By default ignores repeated delimiters, unless argument rep == 1.
+std::vector<std::string>& splitstring::split(char delim, int rep) {
+ if (!flds.empty()) flds.clear(); // empty vector if necessary
+ std::string work = data();
+ std::string buf = "";
+ int i = 0;
+ while (i < work.length()) {
+ if (work[i] != delim)
+ buf += work[i];
+ else if (rep == 1) {
+ flds.push_back(buf);
+ buf = "";
+ } else if (buf.length() > 0) {
+ flds.push_back(buf);
+ buf = "";
+ }
+ i++;
+ }
+ if (!buf.empty())
+ flds.push_back(buf);
+ return flds;
+}
+
+cPlugin *GetScraperPlugin(void) {
+ static cPlugin *pScraper = cPluginManager::GetPlugin("scraper2vdr");
+ if( !pScraper ) // if it doesn't exit, try tvscraper
+ pScraper = cPluginManager::GetPlugin("tvscraper");
+ return pScraper;
+}
+
diff --git a/helpers.h b/helpers.h
new file mode 100644
index 0000000..c3e3eaf
--- /dev/null
+++ b/helpers.h
@@ -0,0 +1,24 @@
+#ifndef __HELPERS_H
+#define __HELPERS_H
+
+#include <vdr/osd.h>
+#include <vdr/plugin.h>
+
+cOsd *CreateOsd(int Left, int Top, int Width, int Height);
+void DrawBlendedBackground(cPixmap *pixmap, int xStart, int width, tColor color, tColor colorBlending, bool fromTop);
+void DrawRoundedCorners(cPixmap *p, int radius, int x, int y, int width, int height);
+void DrawRoundedCornersWithBorder(cPixmap *p, tColor borderColor, int radius, int width, int height);
+cSize ScaleToFit(int widthMax, int heightMax, int widthOriginal, int heightOriginal);
+int Minimum(int a, int b, int c, int d, int e, int f);
+std::string CutText(std::string text, int width, const cFont *font);
+std::string StrToLowerCase(std::string str);
+
+class splitstring : public std::string {
+ std::vector<std::string> flds;
+public:
+ splitstring(const char *s) : std::string(s) { };
+ std::vector<std::string>& split(char delim, int rep=0);
+};
+
+cPlugin *GetScraperPlugin(void);
+#endif // __HELPERS_H
diff --git a/icons/alternative/vdrlogo_gen2vdr.png b/icons/alternative/vdrlogo_gen2vdr.png
index 3abbd2f..72b6a0e 100644
Binary files a/icons/alternative/vdrlogo_gen2vdr.png and b/icons/alternative/vdrlogo_gen2vdr.png differ
diff --git a/icons/anthra/extraIcons/Applikationen.png b/icons/anthra/extraIcons/Applikationen.png
new file mode 100644
index 0000000..3c3b616
Binary files /dev/null and b/icons/anthra/extraIcons/Applikationen.png differ
diff --git a/icons/anthra/extraIcons/Audio.png b/icons/anthra/extraIcons/Audio.png
new file mode 100644
index 0000000..ff387fe
Binary files /dev/null and b/icons/anthra/extraIcons/Audio.png differ
diff --git a/icons/anthra/extraIcons/Aufnahmen-Liste aktualisieren.png b/icons/anthra/extraIcons/Aufnahmen-Liste aktualisieren.png
new file mode 100644
index 0000000..3cdddc9
Binary files /dev/null and b/icons/anthra/extraIcons/Aufnahmen-Liste aktualisieren.png differ
diff --git a/icons/anthra/extraIcons/Dienstprogramme.png b/icons/anthra/extraIcons/Dienstprogramme.png
new file mode 100644
index 0000000..793aba6
Binary files /dev/null and b/icons/anthra/extraIcons/Dienstprogramme.png differ
diff --git a/icons/anthra/extraIcons/FireFox.png b/icons/anthra/extraIcons/FireFox.png
new file mode 100644
index 0000000..192fadc
Binary files /dev/null and b/icons/anthra/extraIcons/FireFox.png differ
diff --git a/icons/anthra/extraIcons/Info.png b/icons/anthra/extraIcons/Info.png
new file mode 100644
index 0000000..6737431
Binary files /dev/null and b/icons/anthra/extraIcons/Info.png differ
diff --git a/icons/anthra/extraIcons/Internet.png b/icons/anthra/extraIcons/Internet.png
new file mode 100644
index 0000000..f3db150
Binary files /dev/null and b/icons/anthra/extraIcons/Internet.png differ
diff --git a/icons/anthra/extraIcons/Medien.png b/icons/anthra/extraIcons/Medien.png
new file mode 100644
index 0000000..0ce2360
Binary files /dev/null and b/icons/anthra/extraIcons/Medien.png differ
diff --git a/icons/anthra/extraIcons/Rechner neu starten.png b/icons/anthra/extraIcons/Rechner neu starten.png
new file mode 100644
index 0000000..5783ccf
Binary files /dev/null and b/icons/anthra/extraIcons/Rechner neu starten.png differ
diff --git a/icons/anthra/extraIcons/Remote wakeup.png b/icons/anthra/extraIcons/Remote wakeup.png
new file mode 100644
index 0000000..1cd2f6e
Binary files /dev/null and b/icons/anthra/extraIcons/Remote wakeup.png differ
diff --git a/icons/anthra/extraIcons/Server pausieren.png b/icons/anthra/extraIcons/Server pausieren.png
new file mode 100644
index 0000000..2e9321b
Binary files /dev/null and b/icons/anthra/extraIcons/Server pausieren.png differ
diff --git a/icons/anthra/extraIcons/Spiele.png b/icons/anthra/extraIcons/Spiele.png
new file mode 100644
index 0000000..8e07161
Binary files /dev/null and b/icons/anthra/extraIcons/Spiele.png differ
diff --git a/icons/anthra/extraIcons/System herunterfahren.png b/icons/anthra/extraIcons/System herunterfahren.png
new file mode 100644
index 0000000..e0234df
Binary files /dev/null and b/icons/anthra/extraIcons/System herunterfahren.png differ
diff --git a/icons/anthra/extraIcons/System.png b/icons/anthra/extraIcons/System.png
new file mode 100644
index 0000000..81d100e
Binary files /dev/null and b/icons/anthra/extraIcons/System.png differ
diff --git a/icons/anthra/extraIcons/Tools.png b/icons/anthra/extraIcons/Tools.png
new file mode 100644
index 0000000..cf328ef
Binary files /dev/null and b/icons/anthra/extraIcons/Tools.png differ
diff --git a/icons/anthra/extraIcons/Tunderbird.png b/icons/anthra/extraIcons/Tunderbird.png
new file mode 100644
index 0000000..5ae27e0
Binary files /dev/null and b/icons/anthra/extraIcons/Tunderbird.png differ
diff --git a/icons/anthra/extraIcons/USB Massenspeicher sicher entfernen.png b/icons/anthra/extraIcons/USB Massenspeicher sicher entfernen.png
new file mode 100644
index 0000000..cd7b81c
Binary files /dev/null and b/icons/anthra/extraIcons/USB Massenspeicher sicher entfernen.png differ
diff --git a/icons/anthra/extraIcons/VDR neu starten.png b/icons/anthra/extraIcons/VDR neu starten.png
new file mode 100644
index 0000000..14904ca
Binary files /dev/null and b/icons/anthra/extraIcons/VDR neu starten.png differ
diff --git a/icons/anthra/extraIcons/Video.png b/icons/anthra/extraIcons/Video.png
new file mode 100644
index 0000000..490ca4b
Binary files /dev/null and b/icons/anthra/extraIcons/Video.png differ
diff --git a/icons/anthra/extraIcons/Web.png b/icons/anthra/extraIcons/Web.png
new file mode 100644
index 0000000..20260e3
Binary files /dev/null and b/icons/anthra/extraIcons/Web.png differ
diff --git a/icons/anthra/extraIcons/XBMC.png b/icons/anthra/extraIcons/XBMC.png
new file mode 100644
index 0000000..c7c4c04
Binary files /dev/null and b/icons/anthra/extraIcons/XBMC.png differ
diff --git a/icons/anthra/extraIcons/Xterm.png b/icons/anthra/extraIcons/Xterm.png
new file mode 100644
index 0000000..fa75282
Binary files /dev/null and b/icons/anthra/extraIcons/Xterm.png differ
diff --git a/icons/anthra/extraIcons/audiovideo.png b/icons/anthra/extraIcons/audiovideo.png
new file mode 100644
index 0000000..726538d
Binary files /dev/null and b/icons/anthra/extraIcons/audiovideo.png differ
diff --git a/icons/anthra/extraIcons/markad_status.png b/icons/anthra/extraIcons/markad_status.png
new file mode 100644
index 0000000..4fdc7a4
Binary files /dev/null and b/icons/anthra/extraIcons/markad_status.png differ
diff --git a/icons/anthra/extraIcons/schneiden_abbrechen.png b/icons/anthra/extraIcons/schneiden_abbrechen.png
new file mode 100644
index 0000000..b2e0bd3
Binary files /dev/null and b/icons/anthra/extraIcons/schneiden_abbrechen.png differ
diff --git a/icons/anthra/extraIcons/tux.png b/icons/anthra/extraIcons/tux.png
new file mode 100644
index 0000000..c5b4742
Binary files /dev/null and b/icons/anthra/extraIcons/tux.png differ
diff --git a/icons/anthra/extraIcons/usb.png b/icons/anthra/extraIcons/usb.png
new file mode 100644
index 0000000..c4db1d4
Binary files /dev/null and b/icons/anthra/extraIcons/usb.png differ
diff --git a/icons/anthra/extraIcons/vdrlogo.png b/icons/anthra/extraIcons/vdrlogo.png
new file mode 100644
index 0000000..037a191
Binary files /dev/null and b/icons/anthra/extraIcons/vdrlogo.png differ
diff --git a/icons/anthra/extraIcons/yaicon_blue.png b/icons/anthra/extraIcons/yaicon_blue.png
new file mode 100644
index 0000000..2c49273
Binary files /dev/null and b/icons/anthra/extraIcons/yaicon_blue.png differ
diff --git a/icons/anthra/menuIcons/CAM.png b/icons/anthra/menuIcons/CAM.png
new file mode 100644
index 0000000..a394877
Binary files /dev/null and b/icons/anthra/menuIcons/CAM.png differ
diff --git a/icons/anthra/menuIcons/Channels.png b/icons/anthra/menuIcons/Channels.png
new file mode 100644
index 0000000..ba2ba78
Binary files /dev/null and b/icons/anthra/menuIcons/Channels.png differ
diff --git a/icons/anthra/menuIcons/Commands.png b/icons/anthra/menuIcons/Commands.png
new file mode 100644
index 0000000..c6a83ef
Binary files /dev/null and b/icons/anthra/menuIcons/Commands.png differ
diff --git a/icons/anthra/menuIcons/DVB.png b/icons/anthra/menuIcons/DVB.png
new file mode 100644
index 0000000..3789145
Binary files /dev/null and b/icons/anthra/menuIcons/DVB.png differ
diff --git a/icons/anthra/menuIcons/EPG.png b/icons/anthra/menuIcons/EPG.png
new file mode 100644
index 0000000..e868b90
Binary files /dev/null and b/icons/anthra/menuIcons/EPG.png differ
diff --git a/icons/anthra/menuIcons/LNB.png b/icons/anthra/menuIcons/LNB.png
new file mode 100644
index 0000000..896dd99
Binary files /dev/null and b/icons/anthra/menuIcons/LNB.png differ
diff --git a/icons/anthra/menuIcons/Miscellaneous.png b/icons/anthra/menuIcons/Miscellaneous.png
new file mode 100644
index 0000000..2a41c4d
Binary files /dev/null and b/icons/anthra/menuIcons/Miscellaneous.png differ
diff --git a/icons/anthra/menuIcons/OSD.png b/icons/anthra/menuIcons/OSD.png
new file mode 100644
index 0000000..8f571c6
Binary files /dev/null and b/icons/anthra/menuIcons/OSD.png differ
diff --git a/icons/anthra/menuIcons/Plugins.png b/icons/anthra/menuIcons/Plugins.png
new file mode 100644
index 0000000..3fcba70
Binary files /dev/null and b/icons/anthra/menuIcons/Plugins.png differ
diff --git a/icons/anthra/menuIcons/Recording.png b/icons/anthra/menuIcons/Recording.png
new file mode 100644
index 0000000..741b1af
Binary files /dev/null and b/icons/anthra/menuIcons/Recording.png differ
diff --git a/icons/anthra/menuIcons/Recordings.png b/icons/anthra/menuIcons/Recordings.png
new file mode 100644
index 0000000..79aeeb7
Binary files /dev/null and b/icons/anthra/menuIcons/Recordings.png differ
diff --git a/icons/anthra/menuIcons/Replay.png b/icons/anthra/menuIcons/Replay.png
new file mode 100644
index 0000000..621596c
Binary files /dev/null and b/icons/anthra/menuIcons/Replay.png differ
diff --git a/icons/anthra/menuIcons/Restart.png b/icons/anthra/menuIcons/Restart.png
new file mode 100644
index 0000000..aa23cd4
Binary files /dev/null and b/icons/anthra/menuIcons/Restart.png differ
diff --git a/icons/anthra/menuIcons/Schedule.png b/icons/anthra/menuIcons/Schedule.png
new file mode 100644
index 0000000..3a98cac
Binary files /dev/null and b/icons/anthra/menuIcons/Schedule.png differ
diff --git a/icons/anthra/menuIcons/Setup.png b/icons/anthra/menuIcons/Setup.png
new file mode 100644
index 0000000..d121148
Binary files /dev/null and b/icons/anthra/menuIcons/Setup.png differ
diff --git a/icons/anthra/menuIcons/StopRecording.png b/icons/anthra/menuIcons/StopRecording.png
new file mode 100644
index 0000000..ed83fbb
Binary files /dev/null and b/icons/anthra/menuIcons/StopRecording.png differ
diff --git a/icons/anthra/menuIcons/StopReplay.png b/icons/anthra/menuIcons/StopReplay.png
new file mode 100644
index 0000000..9192760
Binary files /dev/null and b/icons/anthra/menuIcons/StopReplay.png differ
diff --git a/icons/anthra/menuIcons/Timers.png b/icons/anthra/menuIcons/Timers.png
new file mode 100644
index 0000000..b866c36
Binary files /dev/null and b/icons/anthra/menuIcons/Timers.png differ
diff --git a/icons/anthra/pluginIcons/arghdirector.png b/icons/anthra/pluginIcons/arghdirector.png
new file mode 100644
index 0000000..bbd221a
Binary files /dev/null and b/icons/anthra/pluginIcons/arghdirector.png differ
diff --git a/icons/anthra/pluginIcons/autostart.png b/icons/anthra/pluginIcons/autostart.png
new file mode 100644
index 0000000..6fdb1bb
Binary files /dev/null and b/icons/anthra/pluginIcons/autostart.png differ
diff --git a/icons/anthra/pluginIcons/avahi4vdr.png b/icons/anthra/pluginIcons/avahi4vdr.png
new file mode 100644
index 0000000..044e71d
Binary files /dev/null and b/icons/anthra/pluginIcons/avahi4vdr.png differ
diff --git a/icons/anthra/pluginIcons/avards.png b/icons/anthra/pluginIcons/avards.png
new file mode 100644
index 0000000..cf8d037
Binary files /dev/null and b/icons/anthra/pluginIcons/avards.png differ
diff --git a/icons/anthra/pluginIcons/block.png b/icons/anthra/pluginIcons/block.png
new file mode 100644
index 0000000..86127c2
Binary files /dev/null and b/icons/anthra/pluginIcons/block.png differ
diff --git a/icons/anthra/pluginIcons/burn.png b/icons/anthra/pluginIcons/burn.png
new file mode 100644
index 0000000..305d7ff
Binary files /dev/null and b/icons/anthra/pluginIcons/burn.png differ
diff --git a/icons/anthra/pluginIcons/cdplayer.png b/icons/anthra/pluginIcons/cdplayer.png
new file mode 100644
index 0000000..89a6c19
Binary files /dev/null and b/icons/anthra/pluginIcons/cdplayer.png differ
diff --git a/icons/anthra/pluginIcons/chanman.png b/icons/anthra/pluginIcons/chanman.png
new file mode 100644
index 0000000..a73e83c
Binary files /dev/null and b/icons/anthra/pluginIcons/chanman.png differ
diff --git a/icons/anthra/pluginIcons/check.png b/icons/anthra/pluginIcons/check.png
new file mode 100644
index 0000000..d487a24
Binary files /dev/null and b/icons/anthra/pluginIcons/check.png differ
diff --git a/icons/anthra/pluginIcons/conflictcheckonly.png b/icons/anthra/pluginIcons/conflictcheckonly.png
new file mode 100644
index 0000000..7f832bd
Binary files /dev/null and b/icons/anthra/pluginIcons/conflictcheckonly.png differ
diff --git a/icons/anthra/pluginIcons/ddci.png b/icons/anthra/pluginIcons/ddci.png
new file mode 100644
index 0000000..4ad459c
Binary files /dev/null and b/icons/anthra/pluginIcons/ddci.png differ
diff --git a/icons/anthra/pluginIcons/devstatus.png b/icons/anthra/pluginIcons/devstatus.png
new file mode 100644
index 0000000..96c0ec1
Binary files /dev/null and b/icons/anthra/pluginIcons/devstatus.png differ
diff --git a/icons/anthra/pluginIcons/dummydevice.png b/icons/anthra/pluginIcons/dummydevice.png
new file mode 100644
index 0000000..11fd707
Binary files /dev/null and b/icons/anthra/pluginIcons/dummydevice.png differ
diff --git a/icons/anthra/pluginIcons/duplicates.png b/icons/anthra/pluginIcons/duplicates.png
new file mode 100644
index 0000000..dc1be57
Binary files /dev/null and b/icons/anthra/pluginIcons/duplicates.png differ
diff --git a/icons/anthra/pluginIcons/dvbapi.png b/icons/anthra/pluginIcons/dvbapi.png
new file mode 100644
index 0000000..b966461
Binary files /dev/null and b/icons/anthra/pluginIcons/dvbapi.png differ
diff --git a/icons/anthra/pluginIcons/dvbhddevice.png b/icons/anthra/pluginIcons/dvbhddevice.png
new file mode 100644
index 0000000..b874297
Binary files /dev/null and b/icons/anthra/pluginIcons/dvbhddevice.png differ
diff --git a/icons/anthra/pluginIcons/dvbsddevice.png b/icons/anthra/pluginIcons/dvbsddevice.png
new file mode 100644
index 0000000..106184e
Binary files /dev/null and b/icons/anthra/pluginIcons/dvbsddevice.png differ
diff --git a/icons/anthra/pluginIcons/dynamite.png b/icons/anthra/pluginIcons/dynamite.png
new file mode 100644
index 0000000..28ea35a
Binary files /dev/null and b/icons/anthra/pluginIcons/dynamite.png differ
diff --git a/icons/anthra/pluginIcons/eepg.png b/icons/anthra/pluginIcons/eepg.png
new file mode 100644
index 0000000..3938b96
Binary files /dev/null and b/icons/anthra/pluginIcons/eepg.png differ
diff --git a/icons/anthra/pluginIcons/epg2vdr.png b/icons/anthra/pluginIcons/epg2vdr.png
new file mode 100644
index 0000000..ac8757e
Binary files /dev/null and b/icons/anthra/pluginIcons/epg2vdr.png differ
diff --git a/icons/anthra/pluginIcons/epgsearch.png b/icons/anthra/pluginIcons/epgsearch.png
new file mode 100644
index 0000000..5eab415
Binary files /dev/null and b/icons/anthra/pluginIcons/epgsearch.png differ
diff --git a/icons/anthra/pluginIcons/epgsearchonly.png b/icons/anthra/pluginIcons/epgsearchonly.png
new file mode 100644
index 0000000..b5186e7
Binary files /dev/null and b/icons/anthra/pluginIcons/epgsearchonly.png differ
diff --git a/icons/anthra/pluginIcons/epgsync.png b/icons/anthra/pluginIcons/epgsync.png
new file mode 100644
index 0000000..5c14009
Binary files /dev/null and b/icons/anthra/pluginIcons/epgsync.png differ
diff --git a/icons/anthra/pluginIcons/externalplayer.png b/icons/anthra/pluginIcons/externalplayer.png
new file mode 100644
index 0000000..2bd67db
Binary files /dev/null and b/icons/anthra/pluginIcons/externalplayer.png differ
diff --git a/icons/anthra/pluginIcons/extrecmenu.png b/icons/anthra/pluginIcons/extrecmenu.png
new file mode 100644
index 0000000..6f613f1
Binary files /dev/null and b/icons/anthra/pluginIcons/extrecmenu.png differ
diff --git a/icons/anthra/pluginIcons/favorites.png b/icons/anthra/pluginIcons/favorites.png
new file mode 100644
index 0000000..409c852
Binary files /dev/null and b/icons/anthra/pluginIcons/favorites.png differ
diff --git a/icons/anthra/pluginIcons/femon.png b/icons/anthra/pluginIcons/femon.png
new file mode 100644
index 0000000..e87b711
Binary files /dev/null and b/icons/anthra/pluginIcons/femon.png differ
diff --git a/icons/anthra/pluginIcons/fepg.png b/icons/anthra/pluginIcons/fepg.png
new file mode 100644
index 0000000..65023ed
Binary files /dev/null and b/icons/anthra/pluginIcons/fepg.png differ
diff --git a/icons/anthra/pluginIcons/filebrowser.png b/icons/anthra/pluginIcons/filebrowser.png
new file mode 100644
index 0000000..d3f90e0
Binary files /dev/null and b/icons/anthra/pluginIcons/filebrowser.png differ
diff --git a/icons/anthra/pluginIcons/fritzbox.png b/icons/anthra/pluginIcons/fritzbox.png
new file mode 100644
index 0000000..7bfc229
Binary files /dev/null and b/icons/anthra/pluginIcons/fritzbox.png differ
diff --git a/icons/anthra/pluginIcons/graphlcd.png b/icons/anthra/pluginIcons/graphlcd.png
new file mode 100644
index 0000000..39ffd35
Binary files /dev/null and b/icons/anthra/pluginIcons/graphlcd.png differ
diff --git a/icons/anthra/pluginIcons/graphtft.png b/icons/anthra/pluginIcons/graphtft.png
new file mode 100644
index 0000000..39ffd35
Binary files /dev/null and b/icons/anthra/pluginIcons/graphtft.png differ
diff --git a/icons/anthra/pluginIcons/image.png b/icons/anthra/pluginIcons/image.png
new file mode 100644
index 0000000..33644e0
Binary files /dev/null and b/icons/anthra/pluginIcons/image.png differ
diff --git a/icons/anthra/pluginIcons/imonlcd.png b/icons/anthra/pluginIcons/imonlcd.png
new file mode 100644
index 0000000..3d34fc4
Binary files /dev/null and b/icons/anthra/pluginIcons/imonlcd.png differ
diff --git a/icons/anthra/pluginIcons/iptv.png b/icons/anthra/pluginIcons/iptv.png
new file mode 100644
index 0000000..4494ddc
Binary files /dev/null and b/icons/anthra/pluginIcons/iptv.png differ
diff --git a/icons/anthra/pluginIcons/lcdproc.png b/icons/anthra/pluginIcons/lcdproc.png
new file mode 100644
index 0000000..3d34fc4
Binary files /dev/null and b/icons/anthra/pluginIcons/lcdproc.png differ
diff --git a/icons/anthra/pluginIcons/mailbox.png b/icons/anthra/pluginIcons/mailbox.png
new file mode 100644
index 0000000..1bc76e8
Binary files /dev/null and b/icons/anthra/pluginIcons/mailbox.png differ
diff --git a/icons/anthra/pluginIcons/makemkv.png b/icons/anthra/pluginIcons/makemkv.png
new file mode 100644
index 0000000..41cddf1
Binary files /dev/null and b/icons/anthra/pluginIcons/makemkv.png differ
diff --git a/icons/anthra/pluginIcons/markad.png b/icons/anthra/pluginIcons/markad.png
new file mode 100644
index 0000000..b3defaf
Binary files /dev/null and b/icons/anthra/pluginIcons/markad.png differ
diff --git a/icons/anthra/pluginIcons/mlist.png b/icons/anthra/pluginIcons/mlist.png
new file mode 100644
index 0000000..19c367f
Binary files /dev/null and b/icons/anthra/pluginIcons/mlist.png differ
diff --git a/icons/anthra/pluginIcons/music.png b/icons/anthra/pluginIcons/music.png
new file mode 100644
index 0000000..abb012e
Binary files /dev/null and b/icons/anthra/pluginIcons/music.png differ
diff --git a/icons/anthra/pluginIcons/noepg.png b/icons/anthra/pluginIcons/noepg.png
new file mode 100644
index 0000000..eb9410d
Binary files /dev/null and b/icons/anthra/pluginIcons/noepg.png differ
diff --git a/icons/anthra/pluginIcons/nordlichtsepg.png b/icons/anthra/pluginIcons/nordlichtsepg.png
new file mode 100644
index 0000000..3ee3fa2
Binary files /dev/null and b/icons/anthra/pluginIcons/nordlichtsepg.png differ
diff --git a/icons/anthra/pluginIcons/osdteletext.png b/icons/anthra/pluginIcons/osdteletext.png
new file mode 100644
index 0000000..664e770
Binary files /dev/null and b/icons/anthra/pluginIcons/osdteletext.png differ
diff --git a/icons/anthra/pluginIcons/peer.png b/icons/anthra/pluginIcons/peer.png
new file mode 100644
index 0000000..998d568
Binary files /dev/null and b/icons/anthra/pluginIcons/peer.png differ
diff --git a/icons/anthra/pluginIcons/pin.png b/icons/anthra/pluginIcons/pin.png
new file mode 100644
index 0000000..b4ae4f8
Binary files /dev/null and b/icons/anthra/pluginIcons/pin.png differ
diff --git a/icons/anthra/pluginIcons/play.png b/icons/anthra/pluginIcons/play.png
new file mode 100644
index 0000000..2848fc6
Binary files /dev/null and b/icons/anthra/pluginIcons/play.png differ
diff --git a/icons/anthra/pluginIcons/pvrinput.png b/icons/anthra/pluginIcons/pvrinput.png
new file mode 100644
index 0000000..724f698
Binary files /dev/null and b/icons/anthra/pluginIcons/pvrinput.png differ
diff --git a/icons/anthra/pluginIcons/quickepgsearch.png b/icons/anthra/pluginIcons/quickepgsearch.png
new file mode 100644
index 0000000..76a31f4
Binary files /dev/null and b/icons/anthra/pluginIcons/quickepgsearch.png differ
diff --git a/icons/anthra/pluginIcons/radio.png b/icons/anthra/pluginIcons/radio.png
new file mode 100644
index 0000000..193b7d4
Binary files /dev/null and b/icons/anthra/pluginIcons/radio.png differ
diff --git a/icons/anthra/pluginIcons/remote.png b/icons/anthra/pluginIcons/remote.png
new file mode 100644
index 0000000..7f46b1b
Binary files /dev/null and b/icons/anthra/pluginIcons/remote.png differ
diff --git a/icons/anthra/pluginIcons/remotetimers.png b/icons/anthra/pluginIcons/remotetimers.png
new file mode 100644
index 0000000..fae3b79
Binary files /dev/null and b/icons/anthra/pluginIcons/remotetimers.png differ
diff --git a/icons/anthra/pluginIcons/rssreader.png b/icons/anthra/pluginIcons/rssreader.png
new file mode 100644
index 0000000..db538f0
Binary files /dev/null and b/icons/anthra/pluginIcons/rssreader.png differ
diff --git a/icons/anthra/pluginIcons/sc.png b/icons/anthra/pluginIcons/sc.png
new file mode 100644
index 0000000..2472d6c
Binary files /dev/null and b/icons/anthra/pluginIcons/sc.png differ
diff --git a/icons/anthra/pluginIcons/scraper2vdr.png b/icons/anthra/pluginIcons/scraper2vdr.png
new file mode 100644
index 0000000..a106cb5
Binary files /dev/null and b/icons/anthra/pluginIcons/scraper2vdr.png differ
diff --git a/icons/anthra/pluginIcons/screenshot.png b/icons/anthra/pluginIcons/screenshot.png
new file mode 100644
index 0000000..be9b4d5
Binary files /dev/null and b/icons/anthra/pluginIcons/screenshot.png differ
diff --git a/icons/anthra/pluginIcons/seduatmo.png b/icons/anthra/pluginIcons/seduatmo.png
new file mode 100644
index 0000000..4b5292f
Binary files /dev/null and b/icons/anthra/pluginIcons/seduatmo.png differ
diff --git a/icons/anthra/pluginIcons/skyselectfeeds.png b/icons/anthra/pluginIcons/skyselectfeeds.png
new file mode 100644
index 0000000..d81a024
Binary files /dev/null and b/icons/anthra/pluginIcons/skyselectfeeds.png differ
diff --git a/icons/anthra/pluginIcons/sleeptimer.png b/icons/anthra/pluginIcons/sleeptimer.png
new file mode 100644
index 0000000..cd4956f
Binary files /dev/null and b/icons/anthra/pluginIcons/sleeptimer.png differ
diff --git a/icons/anthra/pluginIcons/softhddevice.png b/icons/anthra/pluginIcons/softhddevice.png
new file mode 100644
index 0000000..df13f2c
Binary files /dev/null and b/icons/anthra/pluginIcons/softhddevice.png differ
diff --git a/icons/anthra/pluginIcons/squeezebox.png b/icons/anthra/pluginIcons/squeezebox.png
new file mode 100644
index 0000000..2cd72ef
Binary files /dev/null and b/icons/anthra/pluginIcons/squeezebox.png differ
diff --git a/icons/anthra/pluginIcons/streamdev-server.png b/icons/anthra/pluginIcons/streamdev-server.png
new file mode 100644
index 0000000..e89ed8b
Binary files /dev/null and b/icons/anthra/pluginIcons/streamdev-server.png differ
diff --git a/icons/anthra/pluginIcons/systeminfo.png b/icons/anthra/pluginIcons/systeminfo.png
new file mode 100644
index 0000000..b14763f
Binary files /dev/null and b/icons/anthra/pluginIcons/systeminfo.png differ
diff --git a/icons/anthra/pluginIcons/targavfd.png b/icons/anthra/pluginIcons/targavfd.png
new file mode 100644
index 0000000..e91b111
Binary files /dev/null and b/icons/anthra/pluginIcons/targavfd.png differ
diff --git a/icons/anthra/pluginIcons/trayopenng.png b/icons/anthra/pluginIcons/trayopenng.png
new file mode 100644
index 0000000..6ebd17d
Binary files /dev/null and b/icons/anthra/pluginIcons/trayopenng.png differ
diff --git a/icons/anthra/pluginIcons/tvguide.png b/icons/anthra/pluginIcons/tvguide.png
new file mode 100644
index 0000000..968a37c
Binary files /dev/null and b/icons/anthra/pluginIcons/tvguide.png differ
diff --git a/icons/anthra/pluginIcons/tvm2vdr.png b/icons/anthra/pluginIcons/tvm2vdr.png
new file mode 100644
index 0000000..47f9a91
Binary files /dev/null and b/icons/anthra/pluginIcons/tvm2vdr.png differ
diff --git a/icons/anthra/pluginIcons/tvscraper.png b/icons/anthra/pluginIcons/tvscraper.png
new file mode 100644
index 0000000..a106cb5
Binary files /dev/null and b/icons/anthra/pluginIcons/tvscraper.png differ
diff --git a/icons/anthra/pluginIcons/undelete.png b/icons/anthra/pluginIcons/undelete.png
new file mode 100644
index 0000000..a53d50a
Binary files /dev/null and b/icons/anthra/pluginIcons/undelete.png differ
diff --git a/icons/anthra/pluginIcons/vdrboblight.png b/icons/anthra/pluginIcons/vdrboblight.png
new file mode 100644
index 0000000..4b5292f
Binary files /dev/null and b/icons/anthra/pluginIcons/vdrboblight.png differ
diff --git a/icons/anthra/pluginIcons/weatherhd.png b/icons/anthra/pluginIcons/weatherhd.png
new file mode 100644
index 0000000..a88f11d
Binary files /dev/null and b/icons/anthra/pluginIcons/weatherhd.png differ
diff --git a/icons/anthra/pluginIcons/weatherng.png b/icons/anthra/pluginIcons/weatherng.png
new file mode 100644
index 0000000..a88f11d
Binary files /dev/null and b/icons/anthra/pluginIcons/weatherng.png differ
diff --git a/icons/anthra/pluginIcons/xmltv2vdr.png b/icons/anthra/pluginIcons/xmltv2vdr.png
new file mode 100644
index 0000000..ea73c74
Binary files /dev/null and b/icons/anthra/pluginIcons/xmltv2vdr.png differ
diff --git a/icons/anthra/pluginIcons/yaepghg.png b/icons/anthra/pluginIcons/yaepghg.png
new file mode 100644
index 0000000..53ce443
Binary files /dev/null and b/icons/anthra/pluginIcons/yaepghg.png differ
diff --git a/icons/anthra/skinElements/buttonblue.png b/icons/anthra/skinElements/buttonblue.png
new file mode 100644
index 0000000..3adb84c
Binary files /dev/null and b/icons/anthra/skinElements/buttonblue.png differ
diff --git a/icons/anthra/skinElements/buttongreen.png b/icons/anthra/skinElements/buttongreen.png
new file mode 100644
index 0000000..6a38242
Binary files /dev/null and b/icons/anthra/skinElements/buttongreen.png differ
diff --git a/icons/anthra/skinElements/buttonred.png b/icons/anthra/skinElements/buttonred.png
new file mode 100644
index 0000000..9f0424c
Binary files /dev/null and b/icons/anthra/skinElements/buttonred.png differ
diff --git a/icons/anthra/skinElements/buttonyellow.png b/icons/anthra/skinElements/buttonyellow.png
new file mode 100644
index 0000000..e18abcc
Binary files /dev/null and b/icons/anthra/skinElements/buttonyellow.png differ
diff --git a/icons/anthra/skinElements/channellogoback.png b/icons/anthra/skinElements/channellogoback.png
new file mode 100644
index 0000000..16c0203
Binary files /dev/null and b/icons/anthra/skinElements/channellogoback.png differ
diff --git a/icons/anthra/skinElements/displaychannelback.png b/icons/anthra/skinElements/displaychannelback.png
new file mode 100644
index 0000000..f870fd0
Binary files /dev/null and b/icons/anthra/skinElements/displaychannelback.png differ
diff --git a/icons/anthra/skinElements/displaychannelback_right.png b/icons/anthra/skinElements/displaychannelback_right.png
new file mode 100644
index 0000000..58f81e6
Binary files /dev/null and b/icons/anthra/skinElements/displaychannelback_right.png differ
diff --git a/icons/anthra/skinElements/displaychanneltop.png b/icons/anthra/skinElements/displaychanneltop.png
new file mode 100644
index 0000000..5eb929e
Binary files /dev/null and b/icons/anthra/skinElements/displaychanneltop.png differ
diff --git a/icons/anthra/skinElements/displaychanneltop_right.png b/icons/anthra/skinElements/displaychanneltop_right.png
new file mode 100644
index 0000000..4363104
Binary files /dev/null and b/icons/anthra/skinElements/displaychanneltop_right.png differ
diff --git a/icons/anthra/skinElements/displayreplayback.png b/icons/anthra/skinElements/displayreplayback.png
new file mode 100644
index 0000000..79ba3c6
Binary files /dev/null and b/icons/anthra/skinElements/displayreplayback.png differ
diff --git a/icons/anthra/skinElements/displayreplaytop.png b/icons/anthra/skinElements/displayreplaytop.png
new file mode 100644
index 0000000..285fc53
Binary files /dev/null and b/icons/anthra/skinElements/displayreplaytop.png differ
diff --git a/icons/anthra/skinElements/displayvolume.png b/icons/anthra/skinElements/displayvolume.png
new file mode 100644
index 0000000..0a10dc2
Binary files /dev/null and b/icons/anthra/skinElements/displayvolume.png differ
diff --git a/icons/anthra/skinElements/header_mirroredtop.png b/icons/anthra/skinElements/header_mirroredtop.png
new file mode 100644
index 0000000..a7f27ed
Binary files /dev/null and b/icons/anthra/skinElements/header_mirroredtop.png differ
diff --git a/icons/anthra/skinElements/headerback.png b/icons/anthra/skinElements/headerback.png
new file mode 100644
index 0000000..585285c
Binary files /dev/null and b/icons/anthra/skinElements/headerback.png differ
diff --git a/icons/anthra/skinElements/headerback_mirrored.png b/icons/anthra/skinElements/headerback_mirrored.png
new file mode 100644
index 0000000..585285c
Binary files /dev/null and b/icons/anthra/skinElements/headerback_mirrored.png differ
diff --git a/icons/anthra/skinElements/headertop.png b/icons/anthra/skinElements/headertop.png
new file mode 100644
index 0000000..b2643f9
Binary files /dev/null and b/icons/anthra/skinElements/headertop.png differ
diff --git a/icons/anthra/skinElements/menubutton.png b/icons/anthra/skinElements/menubutton.png
new file mode 100644
index 0000000..8398390
Binary files /dev/null and b/icons/anthra/skinElements/menubutton.png differ
diff --git a/icons/anthra/skinElements/menubuttonactive.png b/icons/anthra/skinElements/menubuttonactive.png
new file mode 100644
index 0000000..7e7a24b
Binary files /dev/null and b/icons/anthra/skinElements/menubuttonactive.png differ
diff --git a/icons/anthra/skinElements/menubuttondefault.png b/icons/anthra/skinElements/menubuttondefault.png
new file mode 100644
index 0000000..58592db
Binary files /dev/null and b/icons/anthra/skinElements/menubuttondefault.png differ
diff --git a/icons/anthra/skinElements/menubuttondefaultactive.png b/icons/anthra/skinElements/menubuttondefaultactive.png
new file mode 100644
index 0000000..7eb87ae
Binary files /dev/null and b/icons/anthra/skinElements/menubuttondefaultactive.png differ
diff --git a/icons/anthra/skinElements/menubuttontop.png b/icons/anthra/skinElements/menubuttontop.png
new file mode 100644
index 0000000..c92b81b
Binary files /dev/null and b/icons/anthra/skinElements/menubuttontop.png differ
diff --git a/icons/anthra/skinElements/messageError.png b/icons/anthra/skinElements/messageError.png
new file mode 100644
index 0000000..77b766d
Binary files /dev/null and b/icons/anthra/skinElements/messageError.png differ
diff --git a/icons/anthra/skinElements/messageInfo.png b/icons/anthra/skinElements/messageInfo.png
new file mode 100644
index 0000000..cb4fea6
Binary files /dev/null and b/icons/anthra/skinElements/messageInfo.png differ
diff --git a/icons/anthra/skinElements/messageStatus.png b/icons/anthra/skinElements/messageStatus.png
new file mode 100644
index 0000000..c1bb77d
Binary files /dev/null and b/icons/anthra/skinElements/messageStatus.png differ
diff --git a/icons/anthra/skinElements/messageWarning.png b/icons/anthra/skinElements/messageWarning.png
new file mode 100644
index 0000000..a27c628
Binary files /dev/null and b/icons/anthra/skinElements/messageWarning.png differ
diff --git a/icons/anthra/skinElements/scrollbar.png b/icons/anthra/skinElements/scrollbar.png
new file mode 100644
index 0000000..131d75f
Binary files /dev/null and b/icons/anthra/skinElements/scrollbar.png differ
diff --git a/icons/anthra/skinIcons/Channelseparator.png b/icons/anthra/skinIcons/Channelseparator.png
new file mode 100644
index 0000000..b4cce1f
Binary files /dev/null and b/icons/anthra/skinIcons/Channelseparator.png differ
diff --git a/icons/anthra/skinIcons/DiskUsage.png b/icons/anthra/skinIcons/DiskUsage.png
new file mode 100644
index 0000000..a6ca97c
Binary files /dev/null and b/icons/anthra/skinIcons/DiskUsage.png differ
diff --git a/icons/anthra/skinIcons/Thumbs.db b/icons/anthra/skinIcons/Thumbs.db
new file mode 100644
index 0000000..5e6dc7b
Binary files /dev/null and b/icons/anthra/skinIcons/Thumbs.db differ
diff --git a/icons/anthra/skinIcons/ac3.png b/icons/anthra/skinIcons/ac3.png
new file mode 100644
index 0000000..09bb555
Binary files /dev/null and b/icons/anthra/skinIcons/ac3.png differ
diff --git a/icons/anthra/skinIcons/activetimer.png b/icons/anthra/skinIcons/activetimer.png
new file mode 100644
index 0000000..77865e9
Binary files /dev/null and b/icons/anthra/skinIcons/activetimer.png differ
diff --git a/icons/anthra/skinIcons/activetimersmall.png b/icons/anthra/skinIcons/activetimersmall.png
new file mode 100644
index 0000000..75fe9c7
Binary files /dev/null and b/icons/anthra/skinIcons/activetimersmall.png differ
diff --git a/icons/anthra/skinIcons/arrowLeftChannelSep.png b/icons/anthra/skinIcons/arrowLeftChannelSep.png
new file mode 100644
index 0000000..06dc063
Binary files /dev/null and b/icons/anthra/skinIcons/arrowLeftChannelSep.png differ
diff --git a/icons/anthra/skinIcons/arrowRightChannelSep.png b/icons/anthra/skinIcons/arrowRightChannelSep.png
new file mode 100644
index 0000000..4b3910b
Binary files /dev/null and b/icons/anthra/skinIcons/arrowRightChannelSep.png differ
diff --git a/icons/anthra/skinIcons/channeldelimiter.png b/icons/anthra/skinIcons/channeldelimiter.png
new file mode 100644
index 0000000..991b612
Binary files /dev/null and b/icons/anthra/skinIcons/channeldelimiter.png differ
diff --git a/icons/anthra/skinIcons/crypted.png b/icons/anthra/skinIcons/crypted.png
new file mode 100644
index 0000000..ae24b18
Binary files /dev/null and b/icons/anthra/skinIcons/crypted.png differ
diff --git a/icons/anthra/skinIcons/daydelimiter.png b/icons/anthra/skinIcons/daydelimiter.png
new file mode 100644
index 0000000..5a75cf1
Binary files /dev/null and b/icons/anthra/skinIcons/daydelimiter.png differ
diff --git a/icons/anthra/skinIcons/defaultPoster.png b/icons/anthra/skinIcons/defaultPoster.png
new file mode 100644
index 0000000..6c6653a
Binary files /dev/null and b/icons/anthra/skinIcons/defaultPoster.png differ
diff --git a/icons/anthra/skinIcons/discpercent.png b/icons/anthra/skinIcons/discpercent.png
new file mode 100644
index 0000000..f23c942
Binary files /dev/null and b/icons/anthra/skinIcons/discpercent.png differ
diff --git a/icons/anthra/skinIcons/dolbyoff.png b/icons/anthra/skinIcons/dolbyoff.png
new file mode 100644
index 0000000..aa37873
Binary files /dev/null and b/icons/anthra/skinIcons/dolbyoff.png differ
diff --git a/icons/anthra/skinIcons/dolbyon.png b/icons/anthra/skinIcons/dolbyon.png
new file mode 100644
index 0000000..5281cb4
Binary files /dev/null and b/icons/anthra/skinIcons/dolbyon.png differ
diff --git a/icons/anthra/skinIcons/encrypted.png b/icons/anthra/skinIcons/encrypted.png
new file mode 100644
index 0000000..827d6c5
Binary files /dev/null and b/icons/anthra/skinIcons/encrypted.png differ
diff --git a/icons/anthra/skinIcons/fta.png b/icons/anthra/skinIcons/fta.png
new file mode 100644
index 0000000..55e6fab
Binary files /dev/null and b/icons/anthra/skinIcons/fta.png differ
diff --git a/icons/anthra/skinIcons/fwd.png b/icons/anthra/skinIcons/fwd.png
new file mode 100644
index 0000000..15a8e90
Binary files /dev/null and b/icons/anthra/skinIcons/fwd.png differ
diff --git a/icons/anthra/skinIcons/fwdInactive.png b/icons/anthra/skinIcons/fwdInactive.png
new file mode 100644
index 0000000..4c821cf
Binary files /dev/null and b/icons/anthra/skinIcons/fwdInactive.png differ
diff --git a/icons/anthra/skinIcons/fwdx1.png b/icons/anthra/skinIcons/fwdx1.png
new file mode 100644
index 0000000..b5d23b9
Binary files /dev/null and b/icons/anthra/skinIcons/fwdx1.png differ
diff --git a/icons/anthra/skinIcons/fwdx2.png b/icons/anthra/skinIcons/fwdx2.png
new file mode 100644
index 0000000..ba72c99
Binary files /dev/null and b/icons/anthra/skinIcons/fwdx2.png differ
diff --git a/icons/anthra/skinIcons/fwdx3.png b/icons/anthra/skinIcons/fwdx3.png
new file mode 100644
index 0000000..8165492
Binary files /dev/null and b/icons/anthra/skinIcons/fwdx3.png differ
diff --git a/icons/anthra/skinIcons/hd1080i.png b/icons/anthra/skinIcons/hd1080i.png
new file mode 100644
index 0000000..815d528
Binary files /dev/null and b/icons/anthra/skinIcons/hd1080i.png differ
diff --git a/icons/anthra/skinIcons/hd1080i_rec.png b/icons/anthra/skinIcons/hd1080i_rec.png
new file mode 100644
index 0000000..815d528
Binary files /dev/null and b/icons/anthra/skinIcons/hd1080i_rec.png differ
diff --git a/icons/anthra/skinIcons/hd720p.png b/icons/anthra/skinIcons/hd720p.png
new file mode 100644
index 0000000..22c0aad
Binary files /dev/null and b/icons/anthra/skinIcons/hd720p.png differ
diff --git a/icons/anthra/skinIcons/hd720p_rec.png b/icons/anthra/skinIcons/hd720p_rec.png
new file mode 100644
index 0000000..22c0aad
Binary files /dev/null and b/icons/anthra/skinIcons/hd720p_rec.png differ
diff --git a/icons/anthra/skinIcons/newrecording.png b/icons/anthra/skinIcons/newrecording.png
new file mode 100644
index 0000000..636bc63
Binary files /dev/null and b/icons/anthra/skinIcons/newrecording.png differ
diff --git a/icons/anthra/skinIcons/pause.png b/icons/anthra/skinIcons/pause.png
new file mode 100644
index 0000000..aaa7924
Binary files /dev/null and b/icons/anthra/skinIcons/pause.png differ
diff --git a/icons/anthra/skinIcons/pauseInactive.png b/icons/anthra/skinIcons/pauseInactive.png
new file mode 100644
index 0000000..13a4d80
Binary files /dev/null and b/icons/anthra/skinIcons/pauseInactive.png differ
diff --git a/icons/anthra/skinIcons/play.png b/icons/anthra/skinIcons/play.png
new file mode 100644
index 0000000..35bbec6
Binary files /dev/null and b/icons/anthra/skinIcons/play.png differ
diff --git a/icons/anthra/skinIcons/playInactive.png b/icons/anthra/skinIcons/playInactive.png
new file mode 100644
index 0000000..5ea50f0
Binary files /dev/null and b/icons/anthra/skinIcons/playInactive.png differ
diff --git a/icons/anthra/skinIcons/radio.png b/icons/anthra/skinIcons/radio.png
new file mode 100644
index 0000000..e375acf
Binary files /dev/null and b/icons/anthra/skinIcons/radio.png differ
diff --git a/icons/anthra/skinIcons/recfolder.png b/icons/anthra/skinIcons/recfolder.png
new file mode 100644
index 0000000..15c7623
Binary files /dev/null and b/icons/anthra/skinIcons/recfolder.png differ
diff --git a/icons/anthra/skinIcons/recoff.png b/icons/anthra/skinIcons/recoff.png
new file mode 100644
index 0000000..74348ba
Binary files /dev/null and b/icons/anthra/skinIcons/recoff.png differ
diff --git a/icons/anthra/skinIcons/recon.png b/icons/anthra/skinIcons/recon.png
new file mode 100644
index 0000000..1101f87
Binary files /dev/null and b/icons/anthra/skinIcons/recon.png differ
diff --git a/icons/anthra/skinIcons/recordingcutted.png b/icons/anthra/skinIcons/recordingcutted.png
new file mode 100644
index 0000000..ae5f5a5
Binary files /dev/null and b/icons/anthra/skinIcons/recordingcutted.png differ
diff --git a/icons/anthra/skinIcons/recordingdatetime.png b/icons/anthra/skinIcons/recordingdatetime.png
new file mode 100644
index 0000000..fc9694c
Binary files /dev/null and b/icons/anthra/skinIcons/recordingdatetime.png differ
diff --git a/icons/anthra/skinIcons/rew.png b/icons/anthra/skinIcons/rew.png
new file mode 100644
index 0000000..59ae03e
Binary files /dev/null and b/icons/anthra/skinIcons/rew.png differ
diff --git a/icons/anthra/skinIcons/rewInactive.png b/icons/anthra/skinIcons/rewInactive.png
new file mode 100644
index 0000000..8a3d0be
Binary files /dev/null and b/icons/anthra/skinIcons/rewInactive.png differ
diff --git a/icons/anthra/skinIcons/rewx1.png b/icons/anthra/skinIcons/rewx1.png
new file mode 100644
index 0000000..d50d806
Binary files /dev/null and b/icons/anthra/skinIcons/rewx1.png differ
diff --git a/icons/anthra/skinIcons/rewx2.png b/icons/anthra/skinIcons/rewx2.png
new file mode 100644
index 0000000..cad14c7
Binary files /dev/null and b/icons/anthra/skinIcons/rewx2.png differ
diff --git a/icons/anthra/skinIcons/rewx3.png b/icons/anthra/skinIcons/rewx3.png
new file mode 100644
index 0000000..5959308
Binary files /dev/null and b/icons/anthra/skinIcons/rewx3.png differ
diff --git a/icons/anthra/skinIcons/sd576i.png b/icons/anthra/skinIcons/sd576i.png
new file mode 100644
index 0000000..a486fbf
Binary files /dev/null and b/icons/anthra/skinIcons/sd576i.png differ
diff --git a/icons/anthra/skinIcons/sd576i_rec.png b/icons/anthra/skinIcons/sd576i_rec.png
new file mode 100644
index 0000000..9f8e88c
Binary files /dev/null and b/icons/anthra/skinIcons/sd576i_rec.png differ
diff --git a/icons/anthra/skinIcons/stereo.png b/icons/anthra/skinIcons/stereo.png
new file mode 100644
index 0000000..a3aa42d
Binary files /dev/null and b/icons/anthra/skinIcons/stereo.png differ
diff --git a/icons/anthra/skinIcons/stereooff.png b/icons/anthra/skinIcons/stereooff.png
new file mode 100644
index 0000000..6094194
Binary files /dev/null and b/icons/anthra/skinIcons/stereooff.png differ
diff --git a/icons/anthra/skinIcons/stereoon.png b/icons/anthra/skinIcons/stereoon.png
new file mode 100644
index 0000000..e01b745
Binary files /dev/null and b/icons/anthra/skinIcons/stereoon.png differ
diff --git a/icons/anthra/skinIcons/timerActive.png b/icons/anthra/skinIcons/timerActive.png
new file mode 100644
index 0000000..e4c936e
Binary files /dev/null and b/icons/anthra/skinIcons/timerActive.png differ
diff --git a/icons/anthra/skinIcons/timerInactive.png b/icons/anthra/skinIcons/timerInactive.png
new file mode 100644
index 0000000..a8c9164
Binary files /dev/null and b/icons/anthra/skinIcons/timerInactive.png differ
diff --git a/icons/anthra/skinIcons/timerRecording.png b/icons/anthra/skinIcons/timerRecording.png
new file mode 100644
index 0000000..1a81b6c
Binary files /dev/null and b/icons/anthra/skinIcons/timerRecording.png differ
diff --git a/icons/anthra/skinIcons/tracks.png b/icons/anthra/skinIcons/tracks.png
new file mode 100644
index 0000000..88c76b5
Binary files /dev/null and b/icons/anthra/skinIcons/tracks.png differ
diff --git a/icons/anthra/skinIcons/txtoff.png b/icons/anthra/skinIcons/txtoff.png
new file mode 100644
index 0000000..bec1abc
Binary files /dev/null and b/icons/anthra/skinIcons/txtoff.png differ
diff --git a/icons/anthra/skinIcons/txton.png b/icons/anthra/skinIcons/txton.png
new file mode 100644
index 0000000..d7b7333
Binary files /dev/null and b/icons/anthra/skinIcons/txton.png differ
diff --git a/icons/anthra/skinIcons/vdrlogo.png b/icons/anthra/skinIcons/vdrlogo.png
new file mode 100644
index 0000000..3d6f219
Binary files /dev/null and b/icons/anthra/skinIcons/vdrlogo.png differ
diff --git a/icons/darkblue/skinElements/channellogoback.png b/icons/darkblue/skinElements/channellogoback.png
new file mode 100644
index 0000000..34fbdeb
Binary files /dev/null and b/icons/darkblue/skinElements/channellogoback.png differ
diff --git a/icons/darkgrey/menuIcons/CAM.png b/icons/darkgrey/menuIcons/CAM.png
new file mode 100644
index 0000000..c1d0e33
Binary files /dev/null and b/icons/darkgrey/menuIcons/CAM.png differ
diff --git a/icons/darkgrey/menuIcons/Channels.png b/icons/darkgrey/menuIcons/Channels.png
new file mode 100644
index 0000000..2874090
Binary files /dev/null and b/icons/darkgrey/menuIcons/Channels.png differ
diff --git a/icons/darkgrey/menuIcons/Commands.png b/icons/darkgrey/menuIcons/Commands.png
new file mode 100644
index 0000000..0440dff
Binary files /dev/null and b/icons/darkgrey/menuIcons/Commands.png differ
diff --git a/icons/darkgrey/menuIcons/DVB.png b/icons/darkgrey/menuIcons/DVB.png
new file mode 100644
index 0000000..69694ba
Binary files /dev/null and b/icons/darkgrey/menuIcons/DVB.png differ
diff --git a/icons/darkgrey/menuIcons/EPG.png b/icons/darkgrey/menuIcons/EPG.png
new file mode 100644
index 0000000..fe0c106
Binary files /dev/null and b/icons/darkgrey/menuIcons/EPG.png differ
diff --git a/icons/darkgrey/menuIcons/LNB.png b/icons/darkgrey/menuIcons/LNB.png
new file mode 100644
index 0000000..f6e1bdd
Binary files /dev/null and b/icons/darkgrey/menuIcons/LNB.png differ
diff --git a/icons/darkgrey/menuIcons/Miscellaneous.png b/icons/darkgrey/menuIcons/Miscellaneous.png
new file mode 100644
index 0000000..8f782ac
Binary files /dev/null and b/icons/darkgrey/menuIcons/Miscellaneous.png differ
diff --git a/icons/darkgrey/menuIcons/OSD.png b/icons/darkgrey/menuIcons/OSD.png
new file mode 100644
index 0000000..184b973
Binary files /dev/null and b/icons/darkgrey/menuIcons/OSD.png differ
diff --git a/icons/darkgrey/menuIcons/Plugins.png b/icons/darkgrey/menuIcons/Plugins.png
new file mode 100644
index 0000000..1acc944
Binary files /dev/null and b/icons/darkgrey/menuIcons/Plugins.png differ
diff --git a/icons/darkgrey/menuIcons/Recording.png b/icons/darkgrey/menuIcons/Recording.png
new file mode 100644
index 0000000..ee8e016
Binary files /dev/null and b/icons/darkgrey/menuIcons/Recording.png differ
diff --git a/icons/darkgrey/menuIcons/Recordings.png b/icons/darkgrey/menuIcons/Recordings.png
new file mode 100644
index 0000000..5b4da75
Binary files /dev/null and b/icons/darkgrey/menuIcons/Recordings.png differ
diff --git a/icons/darkgrey/menuIcons/Replay.png b/icons/darkgrey/menuIcons/Replay.png
new file mode 100644
index 0000000..cb31dff
Binary files /dev/null and b/icons/darkgrey/menuIcons/Replay.png differ
diff --git a/icons/darkgrey/menuIcons/Restart.png b/icons/darkgrey/menuIcons/Restart.png
new file mode 100644
index 0000000..688e179
Binary files /dev/null and b/icons/darkgrey/menuIcons/Restart.png differ
diff --git a/icons/darkgrey/menuIcons/Schedule.png b/icons/darkgrey/menuIcons/Schedule.png
new file mode 100644
index 0000000..b5a976a
Binary files /dev/null and b/icons/darkgrey/menuIcons/Schedule.png differ
diff --git a/icons/darkgrey/menuIcons/Setup.png b/icons/darkgrey/menuIcons/Setup.png
new file mode 100644
index 0000000..a7db1ad
Binary files /dev/null and b/icons/darkgrey/menuIcons/Setup.png differ
diff --git a/icons/darkgrey/menuIcons/StopRecording.png b/icons/darkgrey/menuIcons/StopRecording.png
new file mode 100644
index 0000000..b5d3d67
Binary files /dev/null and b/icons/darkgrey/menuIcons/StopRecording.png differ
diff --git a/icons/darkgrey/menuIcons/StopReplay.png b/icons/darkgrey/menuIcons/StopReplay.png
new file mode 100644
index 0000000..c555b96
Binary files /dev/null and b/icons/darkgrey/menuIcons/StopReplay.png differ
diff --git a/icons/darkgrey/menuIcons/Timers.png b/icons/darkgrey/menuIcons/Timers.png
new file mode 100644
index 0000000..5faf764
Binary files /dev/null and b/icons/darkgrey/menuIcons/Timers.png differ
diff --git a/icons/darkgrey/pluginIcons/admin.png b/icons/darkgrey/pluginIcons/admin.png
new file mode 100644
index 0000000..5c5d187
Binary files /dev/null and b/icons/darkgrey/pluginIcons/admin.png differ
diff --git a/icons/darkgrey/pluginIcons/arghdirector.png b/icons/darkgrey/pluginIcons/arghdirector.png
new file mode 100644
index 0000000..99e70d1
Binary files /dev/null and b/icons/darkgrey/pluginIcons/arghdirector.png differ
diff --git a/icons/darkgrey/pluginIcons/autostart.png b/icons/darkgrey/pluginIcons/autostart.png
new file mode 100644
index 0000000..7ea8772
Binary files /dev/null and b/icons/darkgrey/pluginIcons/autostart.png differ
diff --git a/icons/darkgrey/pluginIcons/avahi4vdr.png b/icons/darkgrey/pluginIcons/avahi4vdr.png
new file mode 100644
index 0000000..9342e3e
Binary files /dev/null and b/icons/darkgrey/pluginIcons/avahi4vdr.png differ
diff --git a/icons/darkgrey/pluginIcons/avards.png b/icons/darkgrey/pluginIcons/avards.png
new file mode 100644
index 0000000..4180ac2
Binary files /dev/null and b/icons/darkgrey/pluginIcons/avards.png differ
diff --git a/icons/darkgrey/pluginIcons/block.png b/icons/darkgrey/pluginIcons/block.png
new file mode 100644
index 0000000..71d0829
Binary files /dev/null and b/icons/darkgrey/pluginIcons/block.png differ
diff --git a/icons/darkgrey/pluginIcons/burn.png b/icons/darkgrey/pluginIcons/burn.png
new file mode 100644
index 0000000..677f41b
Binary files /dev/null and b/icons/darkgrey/pluginIcons/burn.png differ
diff --git a/icons/darkgrey/pluginIcons/cdplayer.png b/icons/darkgrey/pluginIcons/cdplayer.png
new file mode 100644
index 0000000..932031a
Binary files /dev/null and b/icons/darkgrey/pluginIcons/cdplayer.png differ
diff --git a/icons/darkgrey/pluginIcons/chanman.png b/icons/darkgrey/pluginIcons/chanman.png
new file mode 100644
index 0000000..1867ef1
Binary files /dev/null and b/icons/darkgrey/pluginIcons/chanman.png differ
diff --git a/icons/darkgrey/pluginIcons/ddci.png b/icons/darkgrey/pluginIcons/ddci.png
new file mode 100644
index 0000000..8d85651
Binary files /dev/null and b/icons/darkgrey/pluginIcons/ddci.png differ
diff --git a/icons/darkgrey/pluginIcons/devstatus.png b/icons/darkgrey/pluginIcons/devstatus.png
new file mode 100644
index 0000000..f1acf80
Binary files /dev/null and b/icons/darkgrey/pluginIcons/devstatus.png differ
diff --git a/icons/darkgrey/pluginIcons/dummydevice.png b/icons/darkgrey/pluginIcons/dummydevice.png
new file mode 100644
index 0000000..7d5f8a5
Binary files /dev/null and b/icons/darkgrey/pluginIcons/dummydevice.png differ
diff --git a/icons/darkgrey/pluginIcons/duplicates.png b/icons/darkgrey/pluginIcons/duplicates.png
new file mode 100644
index 0000000..59e1aa9
Binary files /dev/null and b/icons/darkgrey/pluginIcons/duplicates.png differ
diff --git a/icons/darkgrey/pluginIcons/dvbapi.png b/icons/darkgrey/pluginIcons/dvbapi.png
new file mode 100644
index 0000000..3685b51
Binary files /dev/null and b/icons/darkgrey/pluginIcons/dvbapi.png differ
diff --git a/icons/darkgrey/pluginIcons/dvbhddevice.png b/icons/darkgrey/pluginIcons/dvbhddevice.png
new file mode 100644
index 0000000..c6f202d
Binary files /dev/null and b/icons/darkgrey/pluginIcons/dvbhddevice.png differ
diff --git a/icons/darkgrey/pluginIcons/dvbsddevice.png b/icons/darkgrey/pluginIcons/dvbsddevice.png
new file mode 100644
index 0000000..e84cf32
Binary files /dev/null and b/icons/darkgrey/pluginIcons/dvbsddevice.png differ
diff --git a/icons/darkgrey/pluginIcons/dynamite.png b/icons/darkgrey/pluginIcons/dynamite.png
new file mode 100644
index 0000000..7ed9507
Binary files /dev/null and b/icons/darkgrey/pluginIcons/dynamite.png differ
diff --git a/icons/darkgrey/pluginIcons/eepg.png b/icons/darkgrey/pluginIcons/eepg.png
new file mode 100644
index 0000000..00b24ee
Binary files /dev/null and b/icons/darkgrey/pluginIcons/eepg.png differ
diff --git a/icons/darkgrey/pluginIcons/epgfixer.png b/icons/darkgrey/pluginIcons/epgfixer.png
new file mode 100644
index 0000000..adb349f
Binary files /dev/null and b/icons/darkgrey/pluginIcons/epgfixer.png differ
diff --git a/icons/darkgrey/pluginIcons/epgsearch.png b/icons/darkgrey/pluginIcons/epgsearch.png
new file mode 100644
index 0000000..b6b0691
Binary files /dev/null and b/icons/darkgrey/pluginIcons/epgsearch.png differ
diff --git a/icons/darkgrey/pluginIcons/epgsync.png b/icons/darkgrey/pluginIcons/epgsync.png
new file mode 100644
index 0000000..99c8e14
Binary files /dev/null and b/icons/darkgrey/pluginIcons/epgsync.png differ
diff --git a/icons/darkgrey/pluginIcons/externalplayer.png b/icons/darkgrey/pluginIcons/externalplayer.png
new file mode 100644
index 0000000..4d37ccd
Binary files /dev/null and b/icons/darkgrey/pluginIcons/externalplayer.png differ
diff --git a/icons/darkgrey/pluginIcons/favorites.png b/icons/darkgrey/pluginIcons/favorites.png
new file mode 100644
index 0000000..32fc50c
Binary files /dev/null and b/icons/darkgrey/pluginIcons/favorites.png differ
diff --git a/icons/darkgrey/pluginIcons/femon.png b/icons/darkgrey/pluginIcons/femon.png
new file mode 100644
index 0000000..a4c3a03
Binary files /dev/null and b/icons/darkgrey/pluginIcons/femon.png differ
diff --git a/icons/darkgrey/pluginIcons/fepg.png b/icons/darkgrey/pluginIcons/fepg.png
new file mode 100644
index 0000000..6ef4729
Binary files /dev/null and b/icons/darkgrey/pluginIcons/fepg.png differ
diff --git a/icons/darkgrey/pluginIcons/filebrowser.png b/icons/darkgrey/pluginIcons/filebrowser.png
new file mode 100644
index 0000000..972da52
Binary files /dev/null and b/icons/darkgrey/pluginIcons/filebrowser.png differ
diff --git a/icons/darkgrey/pluginIcons/fritzbox.png b/icons/darkgrey/pluginIcons/fritzbox.png
new file mode 100644
index 0000000..ded9590
Binary files /dev/null and b/icons/darkgrey/pluginIcons/fritzbox.png differ
diff --git a/icons/darkgrey/pluginIcons/graphlcd.png b/icons/darkgrey/pluginIcons/graphlcd.png
new file mode 100644
index 0000000..d3f3878
Binary files /dev/null and b/icons/darkgrey/pluginIcons/graphlcd.png differ
diff --git a/icons/darkgrey/pluginIcons/graphtft.png b/icons/darkgrey/pluginIcons/graphtft.png
new file mode 100644
index 0000000..42e7231
Binary files /dev/null and b/icons/darkgrey/pluginIcons/graphtft.png differ
diff --git a/icons/darkgrey/pluginIcons/image.png b/icons/darkgrey/pluginIcons/image.png
new file mode 100644
index 0000000..7162844
Binary files /dev/null and b/icons/darkgrey/pluginIcons/image.png differ
diff --git a/icons/darkgrey/pluginIcons/imonlcd.png b/icons/darkgrey/pluginIcons/imonlcd.png
new file mode 100644
index 0000000..09eda8a
Binary files /dev/null and b/icons/darkgrey/pluginIcons/imonlcd.png differ
diff --git a/icons/darkgrey/pluginIcons/iptv.png b/icons/darkgrey/pluginIcons/iptv.png
new file mode 100644
index 0000000..44d1e67
Binary files /dev/null and b/icons/darkgrey/pluginIcons/iptv.png differ
diff --git a/icons/darkgrey/pluginIcons/lcdproc.png b/icons/darkgrey/pluginIcons/lcdproc.png
new file mode 100644
index 0000000..d3373e8
Binary files /dev/null and b/icons/darkgrey/pluginIcons/lcdproc.png differ
diff --git a/icons/darkgrey/pluginIcons/markad.png b/icons/darkgrey/pluginIcons/markad.png
new file mode 100644
index 0000000..c8dcfca
Binary files /dev/null and b/icons/darkgrey/pluginIcons/markad.png differ
diff --git a/icons/darkgrey/pluginIcons/mlist.png b/icons/darkgrey/pluginIcons/mlist.png
new file mode 100644
index 0000000..0e0e228
Binary files /dev/null and b/icons/darkgrey/pluginIcons/mlist.png differ
diff --git a/icons/darkgrey/pluginIcons/noepg.png b/icons/darkgrey/pluginIcons/noepg.png
new file mode 100644
index 0000000..2c62e76
Binary files /dev/null and b/icons/darkgrey/pluginIcons/noepg.png differ
diff --git a/icons/darkgrey/pluginIcons/osdteletext.png b/icons/darkgrey/pluginIcons/osdteletext.png
new file mode 100644
index 0000000..89f9d9f
Binary files /dev/null and b/icons/darkgrey/pluginIcons/osdteletext.png differ
diff --git a/icons/darkgrey/pluginIcons/remote.png b/icons/darkgrey/pluginIcons/remote.png
new file mode 100644
index 0000000..efe1bd7
Binary files /dev/null and b/icons/darkgrey/pluginIcons/remote.png differ
diff --git a/icons/darkgrey/pluginIcons/remotetimers.png b/icons/darkgrey/pluginIcons/remotetimers.png
new file mode 100644
index 0000000..0c76d6c
Binary files /dev/null and b/icons/darkgrey/pluginIcons/remotetimers.png differ
diff --git a/icons/darkgrey/pluginIcons/rssreader.png b/icons/darkgrey/pluginIcons/rssreader.png
new file mode 100644
index 0000000..9c49355
Binary files /dev/null and b/icons/darkgrey/pluginIcons/rssreader.png differ
diff --git a/icons/darkgrey/pluginIcons/sc.png b/icons/darkgrey/pluginIcons/sc.png
new file mode 100644
index 0000000..6cbb946
Binary files /dev/null and b/icons/darkgrey/pluginIcons/sc.png differ
diff --git a/icons/darkgrey/pluginIcons/screenshot.png b/icons/darkgrey/pluginIcons/screenshot.png
new file mode 100644
index 0000000..be95986
Binary files /dev/null and b/icons/darkgrey/pluginIcons/screenshot.png differ
diff --git a/icons/darkgrey/pluginIcons/seduatmo.png b/icons/darkgrey/pluginIcons/seduatmo.png
new file mode 100644
index 0000000..6baf60a
Binary files /dev/null and b/icons/darkgrey/pluginIcons/seduatmo.png differ
diff --git a/icons/darkgrey/pluginIcons/sleeptimer.png b/icons/darkgrey/pluginIcons/sleeptimer.png
new file mode 100644
index 0000000..606966d
Binary files /dev/null and b/icons/darkgrey/pluginIcons/sleeptimer.png differ
diff --git a/icons/darkgrey/pluginIcons/softhddevice.png b/icons/darkgrey/pluginIcons/softhddevice.png
new file mode 100644
index 0000000..a9c3c8e
Binary files /dev/null and b/icons/darkgrey/pluginIcons/softhddevice.png differ
diff --git a/icons/darkgrey/pluginIcons/streamdev.png b/icons/darkgrey/pluginIcons/streamdev.png
new file mode 100644
index 0000000..a7a6007
Binary files /dev/null and b/icons/darkgrey/pluginIcons/streamdev.png differ
diff --git a/icons/darkgrey/pluginIcons/systeminfo.png b/icons/darkgrey/pluginIcons/systeminfo.png
new file mode 100644
index 0000000..c8cf4d0
Binary files /dev/null and b/icons/darkgrey/pluginIcons/systeminfo.png differ
diff --git a/icons/darkgrey/pluginIcons/targavfd.png b/icons/darkgrey/pluginIcons/targavfd.png
new file mode 100644
index 0000000..acb4fd9
Binary files /dev/null and b/icons/darkgrey/pluginIcons/targavfd.png differ
diff --git a/icons/darkgrey/pluginIcons/trayopenng.png b/icons/darkgrey/pluginIcons/trayopenng.png
new file mode 100644
index 0000000..f96db92
Binary files /dev/null and b/icons/darkgrey/pluginIcons/trayopenng.png differ
diff --git a/icons/darkgrey/pluginIcons/tvguide.png b/icons/darkgrey/pluginIcons/tvguide.png
new file mode 100644
index 0000000..3bbb345
Binary files /dev/null and b/icons/darkgrey/pluginIcons/tvguide.png differ
diff --git a/icons/darkgrey/pluginIcons/undelete.png b/icons/darkgrey/pluginIcons/undelete.png
new file mode 100644
index 0000000..ebde04d
Binary files /dev/null and b/icons/darkgrey/pluginIcons/undelete.png differ
diff --git a/icons/darkgrey/pluginIcons/weatherng.png b/icons/darkgrey/pluginIcons/weatherng.png
new file mode 100644
index 0000000..7b19c38
Binary files /dev/null and b/icons/darkgrey/pluginIcons/weatherng.png differ
diff --git a/icons/darkgrey/skinElements/channellogoback.png b/icons/darkgrey/skinElements/channellogoback.png
new file mode 100644
index 0000000..40ab60f
Binary files /dev/null and b/icons/darkgrey/skinElements/channellogoback.png differ
diff --git a/icons/darkgrey/skinIcons/Channelseparator.png b/icons/darkgrey/skinIcons/Channelseparator.png
new file mode 100644
index 0000000..a1a091c
Binary files /dev/null and b/icons/darkgrey/skinIcons/Channelseparator.png differ
diff --git a/icons/darkgrey/skinIcons/DiskUsage.png b/icons/darkgrey/skinIcons/DiskUsage.png
new file mode 100644
index 0000000..23b5a4d
Binary files /dev/null and b/icons/darkgrey/skinIcons/DiskUsage.png differ
diff --git a/icons/darkgrey/skinIcons/activetimer.png b/icons/darkgrey/skinIcons/activetimer.png
new file mode 100644
index 0000000..f593f44
Binary files /dev/null and b/icons/darkgrey/skinIcons/activetimer.png differ
diff --git a/icons/darkgrey/skinIcons/activetimersmall.png b/icons/darkgrey/skinIcons/activetimersmall.png
new file mode 100644
index 0000000..5484d62
Binary files /dev/null and b/icons/darkgrey/skinIcons/activetimersmall.png differ
diff --git a/icons/darkgrey/skinIcons/arrowLeftChannelSep.png b/icons/darkgrey/skinIcons/arrowLeftChannelSep.png
new file mode 100644
index 0000000..85e456c
Binary files /dev/null and b/icons/darkgrey/skinIcons/arrowLeftChannelSep.png differ
diff --git a/icons/darkgrey/skinIcons/arrowRightChannelSep.png b/icons/darkgrey/skinIcons/arrowRightChannelSep.png
new file mode 100644
index 0000000..d0d9825
Binary files /dev/null and b/icons/darkgrey/skinIcons/arrowRightChannelSep.png differ
diff --git a/icons/darkgrey/skinIcons/daydelimiter.png b/icons/darkgrey/skinIcons/daydelimiter.png
new file mode 100644
index 0000000..0f46eb7
Binary files /dev/null and b/icons/darkgrey/skinIcons/daydelimiter.png differ
diff --git a/icons/darkgrey/skinIcons/encrypted.png b/icons/darkgrey/skinIcons/encrypted.png
new file mode 100644
index 0000000..d7783be
Binary files /dev/null and b/icons/darkgrey/skinIcons/encrypted.png differ
diff --git a/icons/skinIcons/fwd.png b/icons/darkgrey/skinIcons/fwd.png
similarity index 77%
copy from icons/skinIcons/fwd.png
copy to icons/darkgrey/skinIcons/fwd.png
index 13b4751..9f6dd48 100644
Binary files a/icons/skinIcons/fwd.png and b/icons/darkgrey/skinIcons/fwd.png differ
diff --git a/icons/darkgrey/skinIcons/fwdx1.png b/icons/darkgrey/skinIcons/fwdx1.png
new file mode 100644
index 0000000..93caa61
Binary files /dev/null and b/icons/darkgrey/skinIcons/fwdx1.png differ
diff --git a/icons/darkgrey/skinIcons/fwdx2.png b/icons/darkgrey/skinIcons/fwdx2.png
new file mode 100644
index 0000000..dc39d9f
Binary files /dev/null and b/icons/darkgrey/skinIcons/fwdx2.png differ
diff --git a/icons/darkgrey/skinIcons/fwdx3.png b/icons/darkgrey/skinIcons/fwdx3.png
new file mode 100644
index 0000000..89ae796
Binary files /dev/null and b/icons/darkgrey/skinIcons/fwdx3.png differ
diff --git a/icons/skinIcons/pause.png b/icons/darkgrey/skinIcons/pause.png
similarity index 75%
copy from icons/skinIcons/pause.png
copy to icons/darkgrey/skinIcons/pause.png
index e6577cf..f2977e1 100644
Binary files a/icons/skinIcons/pause.png and b/icons/darkgrey/skinIcons/pause.png differ
diff --git a/icons/skinIcons/play.png b/icons/darkgrey/skinIcons/play.png
similarity index 80%
copy from icons/skinIcons/play.png
copy to icons/darkgrey/skinIcons/play.png
index b0c8a18..2eebf44 100644
Binary files a/icons/skinIcons/play.png and b/icons/darkgrey/skinIcons/play.png differ
diff --git a/icons/darkgrey/skinIcons/recordingcutted.png b/icons/darkgrey/skinIcons/recordingcutted.png
new file mode 100644
index 0000000..f23d185
Binary files /dev/null and b/icons/darkgrey/skinIcons/recordingcutted.png differ
diff --git a/icons/darkgrey/skinIcons/recordingdatetime.png b/icons/darkgrey/skinIcons/recordingdatetime.png
new file mode 100644
index 0000000..25b8e93
Binary files /dev/null and b/icons/darkgrey/skinIcons/recordingdatetime.png differ
diff --git a/icons/darkgrey/skinIcons/recordingfolder.png b/icons/darkgrey/skinIcons/recordingfolder.png
new file mode 100644
index 0000000..f952c4b
Binary files /dev/null and b/icons/darkgrey/skinIcons/recordingfolder.png differ
diff --git a/icons/skinIcons/rew.png b/icons/darkgrey/skinIcons/rew.png
similarity index 82%
copy from icons/skinIcons/rew.png
copy to icons/darkgrey/skinIcons/rew.png
index 7055823..4ef6241 100644
Binary files a/icons/skinIcons/rew.png and b/icons/darkgrey/skinIcons/rew.png differ
diff --git a/icons/darkgrey/skinIcons/rewx1.png b/icons/darkgrey/skinIcons/rewx1.png
new file mode 100644
index 0000000..dde466f
Binary files /dev/null and b/icons/darkgrey/skinIcons/rewx1.png differ
diff --git a/icons/darkgrey/skinIcons/rewx2.png b/icons/darkgrey/skinIcons/rewx2.png
new file mode 100644
index 0000000..fede1b5
Binary files /dev/null and b/icons/darkgrey/skinIcons/rewx2.png differ
diff --git a/icons/darkgrey/skinIcons/rewx3.png b/icons/darkgrey/skinIcons/rewx3.png
new file mode 100644
index 0000000..db43c59
Binary files /dev/null and b/icons/darkgrey/skinIcons/rewx3.png differ
diff --git a/icons/darkgrey/skinIcons/timerActive.png b/icons/darkgrey/skinIcons/timerActive.png
new file mode 100644
index 0000000..578991f
Binary files /dev/null and b/icons/darkgrey/skinIcons/timerActive.png differ
diff --git a/icons/darkgrey/skinIcons/timerInactive.png b/icons/darkgrey/skinIcons/timerInactive.png
new file mode 100644
index 0000000..1fa61c2
Binary files /dev/null and b/icons/darkgrey/skinIcons/timerInactive.png differ
diff --git a/icons/darkgrey/skinIcons/tracks.png b/icons/darkgrey/skinIcons/tracks.png
new file mode 100644
index 0000000..912149c
Binary files /dev/null and b/icons/darkgrey/skinIcons/tracks.png differ
diff --git a/icons/darkgrey/skinIcons/vdrlogo.png b/icons/darkgrey/skinIcons/vdrlogo.png
new file mode 100644
index 0000000..7fff397
Binary files /dev/null and b/icons/darkgrey/skinIcons/vdrlogo.png differ
diff --git a/icons/darkred/menuIcons/Commands.png b/icons/darkred/menuIcons/Commands.png
index 7b38eef..0440dff 100644
Binary files a/icons/darkred/menuIcons/Commands.png and b/icons/darkred/menuIcons/Commands.png differ
diff --git a/icons/darkred/menuIcons/Setup.png b/icons/darkred/menuIcons/Setup.png
index c4c026c..a7db1ad 100644
Binary files a/icons/darkred/menuIcons/Setup.png and b/icons/darkred/menuIcons/Setup.png differ
diff --git a/icons/darkred/pluginIcons/admin.png b/icons/darkred/pluginIcons/admin.png
index 91bc7a1..5c5d187 100644
Binary files a/icons/darkred/pluginIcons/admin.png and b/icons/darkred/pluginIcons/admin.png differ
diff --git a/icons/darkred/pluginIcons/dvbhddevice.png b/icons/darkred/pluginIcons/dvbhddevice.png
new file mode 100644
index 0000000..c6f202d
Binary files /dev/null and b/icons/darkred/pluginIcons/dvbhddevice.png differ
diff --git a/icons/darkred/pluginIcons/dvbsddevice.png b/icons/darkred/pluginIcons/dvbsddevice.png
new file mode 100644
index 0000000..e84cf32
Binary files /dev/null and b/icons/darkred/pluginIcons/dvbsddevice.png differ
diff --git a/icons/darkred/pluginIcons/graphtft.png b/icons/darkred/pluginIcons/graphtft.png
new file mode 100644
index 0000000..42e7231
Binary files /dev/null and b/icons/darkred/pluginIcons/graphtft.png differ
diff --git a/icons/darkred/pluginIcons/nordlichtsepg.png b/icons/darkred/pluginIcons/nordlichtsepg.png
new file mode 100644
index 0000000..962acac
Binary files /dev/null and b/icons/darkred/pluginIcons/nordlichtsepg.png differ
diff --git a/icons/darkred/pluginIcons/undelete.png b/icons/darkred/pluginIcons/undelete.png
new file mode 100644
index 0000000..ebde04d
Binary files /dev/null and b/icons/darkred/pluginIcons/undelete.png differ
diff --git a/icons/darkred/pluginIcons/weatherng.png b/icons/darkred/pluginIcons/weatherng.png
new file mode 100644
index 0000000..7b19c38
Binary files /dev/null and b/icons/darkred/pluginIcons/weatherng.png differ
diff --git a/icons/darkred/skinElements/channellogoback.png b/icons/darkred/skinElements/channellogoback.png
new file mode 100644
index 0000000..d81de2b
Binary files /dev/null and b/icons/darkred/skinElements/channellogoback.png differ
diff --git a/icons/darkred/skinIcons/Channelseparator.png b/icons/darkred/skinIcons/Channelseparator.png
index 03bf0d0..59a56d1 100644
Binary files a/icons/darkred/skinIcons/Channelseparator.png and b/icons/darkred/skinIcons/Channelseparator.png differ
diff --git a/icons/darkred/skinIcons/DiskUsage.png b/icons/darkred/skinIcons/DiskUsage.png
index 3fea7b4..23b5a4d 100644
Binary files a/icons/darkred/skinIcons/DiskUsage.png and b/icons/darkred/skinIcons/DiskUsage.png differ
diff --git a/icons/darkred/skinIcons/arrowLeftChannelSep.png b/icons/darkred/skinIcons/arrowLeftChannelSep.png
new file mode 100644
index 0000000..d251ac3
Binary files /dev/null and b/icons/darkred/skinIcons/arrowLeftChannelSep.png differ
diff --git a/icons/darkred/skinIcons/arrowRightChannelSep.png b/icons/darkred/skinIcons/arrowRightChannelSep.png
new file mode 100644
index 0000000..47d9626
Binary files /dev/null and b/icons/darkred/skinIcons/arrowRightChannelSep.png differ
diff --git a/icons/darkred/skinIcons/channelsymbols.png b/icons/darkred/skinIcons/channelsymbols.png
index 4ca060f..58b9f06 100644
Binary files a/icons/darkred/skinIcons/channelsymbols.png and b/icons/darkred/skinIcons/channelsymbols.png differ
diff --git a/icons/darkred/skinIcons/channelsymbols.png b/icons/darkred/skinIcons/channelsymbols1.png
similarity index 100%
copy from icons/darkred/skinIcons/channelsymbols.png
copy to icons/darkred/skinIcons/channelsymbols1.png
diff --git a/icons/darkred/skinIcons/crypted.png b/icons/darkred/skinIcons/crypted.png
new file mode 100644
index 0000000..3a0b10f
Binary files /dev/null and b/icons/darkred/skinIcons/crypted.png differ
diff --git a/icons/darkred/skinIcons/daydelimiter.png b/icons/darkred/skinIcons/daydelimiter.png
index 239093a..944aa0e 100644
Binary files a/icons/darkred/skinIcons/daydelimiter.png and b/icons/darkred/skinIcons/daydelimiter.png differ
diff --git a/icons/darkred/skinIcons/dolbyoff.png b/icons/darkred/skinIcons/dolbyoff.png
new file mode 100644
index 0000000..40cf5e3
Binary files /dev/null and b/icons/darkred/skinIcons/dolbyoff.png differ
diff --git a/icons/darkred/skinIcons/dolbyon.png b/icons/darkred/skinIcons/dolbyon.png
new file mode 100644
index 0000000..1d10725
Binary files /dev/null and b/icons/darkred/skinIcons/dolbyon.png differ
diff --git a/icons/darkred/skinIcons/fta.png b/icons/darkred/skinIcons/fta.png
new file mode 100644
index 0000000..fd8d563
Binary files /dev/null and b/icons/darkred/skinIcons/fta.png differ
diff --git a/icons/darkred/skinIcons/fwdx1.png b/icons/darkred/skinIcons/fwdx1.png
new file mode 100644
index 0000000..b01657a
Binary files /dev/null and b/icons/darkred/skinIcons/fwdx1.png differ
diff --git a/icons/darkred/skinIcons/fwdx2.png b/icons/darkred/skinIcons/fwdx2.png
new file mode 100644
index 0000000..8ea9774
Binary files /dev/null and b/icons/darkred/skinIcons/fwdx2.png differ
diff --git a/icons/darkred/skinIcons/fwdx3.png b/icons/darkred/skinIcons/fwdx3.png
new file mode 100644
index 0000000..cab7859
Binary files /dev/null and b/icons/darkred/skinIcons/fwdx3.png differ
diff --git a/icons/darkred/skinIcons/hd1080i.png b/icons/darkred/skinIcons/hd1080i.png
index f717498..8a44156 100644
Binary files a/icons/darkred/skinIcons/hd1080i.png and b/icons/darkred/skinIcons/hd1080i.png differ
diff --git a/icons/darkred/skinIcons/hd1080i_rec.png b/icons/darkred/skinIcons/hd1080i_rec.png
new file mode 100644
index 0000000..7c687d3
Binary files /dev/null and b/icons/darkred/skinIcons/hd1080i_rec.png differ
diff --git a/icons/darkred/skinIcons/hd720p.png b/icons/darkred/skinIcons/hd720p.png
index 93efca8..2fa9baf 100644
Binary files a/icons/darkred/skinIcons/hd720p.png and b/icons/darkred/skinIcons/hd720p.png differ
diff --git a/icons/darkred/skinIcons/hd720p_rec.png b/icons/darkred/skinIcons/hd720p_rec.png
new file mode 100644
index 0000000..6bd11e6
Binary files /dev/null and b/icons/darkred/skinIcons/hd720p_rec.png differ
diff --git a/icons/darkred/skinIcons/recoff.png b/icons/darkred/skinIcons/recoff.png
new file mode 100644
index 0000000..0748871
Binary files /dev/null and b/icons/darkred/skinIcons/recoff.png differ
diff --git a/icons/darkred/skinIcons/recon.png b/icons/darkred/skinIcons/recon.png
new file mode 100644
index 0000000..fcaf7da
Binary files /dev/null and b/icons/darkred/skinIcons/recon.png differ
diff --git a/icons/darkred/skinIcons/rewx1.png b/icons/darkred/skinIcons/rewx1.png
new file mode 100644
index 0000000..28263f0
Binary files /dev/null and b/icons/darkred/skinIcons/rewx1.png differ
diff --git a/icons/darkred/skinIcons/rewx2.png b/icons/darkred/skinIcons/rewx2.png
new file mode 100644
index 0000000..5c26b44
Binary files /dev/null and b/icons/darkred/skinIcons/rewx2.png differ
diff --git a/icons/darkred/skinIcons/rewx3.png b/icons/darkred/skinIcons/rewx3.png
new file mode 100644
index 0000000..60be17d
Binary files /dev/null and b/icons/darkred/skinIcons/rewx3.png differ
diff --git a/icons/darkred/skinIcons/sd576i.png b/icons/darkred/skinIcons/sd576i.png
index 6e3869f..2e313aa 100644
Binary files a/icons/darkred/skinIcons/sd576i.png and b/icons/darkred/skinIcons/sd576i.png differ
diff --git a/icons/darkred/skinIcons/sd576i_rec.png b/icons/darkred/skinIcons/sd576i_rec.png
new file mode 100644
index 0000000..2e313aa
Binary files /dev/null and b/icons/darkred/skinIcons/sd576i_rec.png differ
diff --git a/icons/darkred/skinIcons/stereooff.png b/icons/darkred/skinIcons/stereooff.png
new file mode 100644
index 0000000..74ed35e
Binary files /dev/null and b/icons/darkred/skinIcons/stereooff.png differ
diff --git a/icons/darkred/skinIcons/stereoon.png b/icons/darkred/skinIcons/stereoon.png
new file mode 100644
index 0000000..0861621
Binary files /dev/null and b/icons/darkred/skinIcons/stereoon.png differ
diff --git a/icons/darkred/skinIcons/tracks.png b/icons/darkred/skinIcons/tracks.png
index 0e4c219..912149c 100644
Binary files a/icons/darkred/skinIcons/tracks.png and b/icons/darkred/skinIcons/tracks.png differ
diff --git a/icons/darkred/skinIcons/txtoff.png b/icons/darkred/skinIcons/txtoff.png
new file mode 100644
index 0000000..4bcba3c
Binary files /dev/null and b/icons/darkred/skinIcons/txtoff.png differ
diff --git a/icons/darkred/skinIcons/txton.png b/icons/darkred/skinIcons/txton.png
new file mode 100644
index 0000000..ab33a20
Binary files /dev/null and b/icons/darkred/skinIcons/txton.png differ
diff --git a/icons/darkred/skinIcons/vdrlogo.png b/icons/darkred/skinIcons/vdrlogo.png
index 7d6d3d5..f3ba37a 100644
Binary files a/icons/darkred/skinIcons/vdrlogo.png and b/icons/darkred/skinIcons/vdrlogo.png differ
diff --git a/icons/darkredNG/extraIcons/Applikationen.png b/icons/darkredNG/extraIcons/Applikationen.png
new file mode 100644
index 0000000..3c3b616
Binary files /dev/null and b/icons/darkredNG/extraIcons/Applikationen.png differ
diff --git a/icons/darkredNG/extraIcons/Audio.png b/icons/darkredNG/extraIcons/Audio.png
new file mode 100644
index 0000000..ff387fe
Binary files /dev/null and b/icons/darkredNG/extraIcons/Audio.png differ
diff --git a/icons/darkredNG/extraIcons/Aufnahmen-Liste aktualisieren.png b/icons/darkredNG/extraIcons/Aufnahmen-Liste aktualisieren.png
new file mode 100644
index 0000000..3cdddc9
Binary files /dev/null and b/icons/darkredNG/extraIcons/Aufnahmen-Liste aktualisieren.png differ
diff --git a/icons/darkredNG/extraIcons/Dienstprogramme.png b/icons/darkredNG/extraIcons/Dienstprogramme.png
new file mode 100644
index 0000000..793aba6
Binary files /dev/null and b/icons/darkredNG/extraIcons/Dienstprogramme.png differ
diff --git a/icons/darkredNG/extraIcons/FireFox.png b/icons/darkredNG/extraIcons/FireFox.png
new file mode 100644
index 0000000..192fadc
Binary files /dev/null and b/icons/darkredNG/extraIcons/FireFox.png differ
diff --git a/icons/darkredNG/extraIcons/Info.png b/icons/darkredNG/extraIcons/Info.png
new file mode 100644
index 0000000..6737431
Binary files /dev/null and b/icons/darkredNG/extraIcons/Info.png differ
diff --git a/icons/darkredNG/extraIcons/Internet.png b/icons/darkredNG/extraIcons/Internet.png
new file mode 100644
index 0000000..f3db150
Binary files /dev/null and b/icons/darkredNG/extraIcons/Internet.png differ
diff --git a/icons/darkredNG/extraIcons/Medien.png b/icons/darkredNG/extraIcons/Medien.png
new file mode 100644
index 0000000..0ce2360
Binary files /dev/null and b/icons/darkredNG/extraIcons/Medien.png differ
diff --git a/icons/darkredNG/extraIcons/Rechner neu starten.png b/icons/darkredNG/extraIcons/Rechner neu starten.png
new file mode 100644
index 0000000..5783ccf
Binary files /dev/null and b/icons/darkredNG/extraIcons/Rechner neu starten.png differ
diff --git a/icons/darkredNG/extraIcons/Remote wakeup.png b/icons/darkredNG/extraIcons/Remote wakeup.png
new file mode 100644
index 0000000..1cd2f6e
Binary files /dev/null and b/icons/darkredNG/extraIcons/Remote wakeup.png differ
diff --git a/icons/darkredNG/extraIcons/Spiele.png b/icons/darkredNG/extraIcons/Spiele.png
new file mode 100644
index 0000000..8e07161
Binary files /dev/null and b/icons/darkredNG/extraIcons/Spiele.png differ
diff --git a/icons/darkredNG/extraIcons/System herunterfahren.png b/icons/darkredNG/extraIcons/System herunterfahren.png
new file mode 100644
index 0000000..e0234df
Binary files /dev/null and b/icons/darkredNG/extraIcons/System herunterfahren.png differ
diff --git a/icons/darkredNG/extraIcons/System.png b/icons/darkredNG/extraIcons/System.png
new file mode 100644
index 0000000..81d100e
Binary files /dev/null and b/icons/darkredNG/extraIcons/System.png differ
diff --git a/icons/darkredNG/extraIcons/Tools.png b/icons/darkredNG/extraIcons/Tools.png
new file mode 100644
index 0000000..cf328ef
Binary files /dev/null and b/icons/darkredNG/extraIcons/Tools.png differ
diff --git a/icons/darkredNG/extraIcons/Tunderbird.png b/icons/darkredNG/extraIcons/Tunderbird.png
new file mode 100644
index 0000000..5ae27e0
Binary files /dev/null and b/icons/darkredNG/extraIcons/Tunderbird.png differ
diff --git a/icons/darkredNG/extraIcons/USB Massenspeicher sicher entfernen.png b/icons/darkredNG/extraIcons/USB Massenspeicher sicher entfernen.png
new file mode 100644
index 0000000..cd7b81c
Binary files /dev/null and b/icons/darkredNG/extraIcons/USB Massenspeicher sicher entfernen.png differ
diff --git a/icons/darkredNG/extraIcons/VDR neu starten.png b/icons/darkredNG/extraIcons/VDR neu starten.png
new file mode 100644
index 0000000..14904ca
Binary files /dev/null and b/icons/darkredNG/extraIcons/VDR neu starten.png differ
diff --git a/icons/darkredNG/extraIcons/Video.png b/icons/darkredNG/extraIcons/Video.png
new file mode 100644
index 0000000..490ca4b
Binary files /dev/null and b/icons/darkredNG/extraIcons/Video.png differ
diff --git a/icons/darkredNG/extraIcons/Web.png b/icons/darkredNG/extraIcons/Web.png
new file mode 100644
index 0000000..20260e3
Binary files /dev/null and b/icons/darkredNG/extraIcons/Web.png differ
diff --git a/icons/darkredNG/extraIcons/XBMC.png b/icons/darkredNG/extraIcons/XBMC.png
new file mode 100644
index 0000000..c7c4c04
Binary files /dev/null and b/icons/darkredNG/extraIcons/XBMC.png differ
diff --git a/icons/darkredNG/extraIcons/Xterm.png b/icons/darkredNG/extraIcons/Xterm.png
new file mode 100644
index 0000000..fa75282
Binary files /dev/null and b/icons/darkredNG/extraIcons/Xterm.png differ
diff --git a/icons/darkredNG/extraIcons/audiovideo.png b/icons/darkredNG/extraIcons/audiovideo.png
new file mode 100644
index 0000000..726538d
Binary files /dev/null and b/icons/darkredNG/extraIcons/audiovideo.png differ
diff --git a/icons/darkredNG/extraIcons/markad_status.png b/icons/darkredNG/extraIcons/markad_status.png
new file mode 100644
index 0000000..4fdc7a4
Binary files /dev/null and b/icons/darkredNG/extraIcons/markad_status.png differ
diff --git a/icons/darkredNG/extraIcons/schneiden_abbrechen.png b/icons/darkredNG/extraIcons/schneiden_abbrechen.png
new file mode 100644
index 0000000..b2e0bd3
Binary files /dev/null and b/icons/darkredNG/extraIcons/schneiden_abbrechen.png differ
diff --git a/icons/darkredNG/extraIcons/tux.png b/icons/darkredNG/extraIcons/tux.png
new file mode 100644
index 0000000..c5b4742
Binary files /dev/null and b/icons/darkredNG/extraIcons/tux.png differ
diff --git a/icons/darkredNG/extraIcons/usb.png b/icons/darkredNG/extraIcons/usb.png
new file mode 100644
index 0000000..c4db1d4
Binary files /dev/null and b/icons/darkredNG/extraIcons/usb.png differ
diff --git a/icons/darkredNG/extraIcons/vdrlogo.png b/icons/darkredNG/extraIcons/vdrlogo.png
new file mode 100644
index 0000000..037a191
Binary files /dev/null and b/icons/darkredNG/extraIcons/vdrlogo.png differ
diff --git a/icons/darkredNG/extraIcons/yaicon_blue.png b/icons/darkredNG/extraIcons/yaicon_blue.png
new file mode 100644
index 0000000..2c49273
Binary files /dev/null and b/icons/darkredNG/extraIcons/yaicon_blue.png differ
diff --git a/icons/darkredNG/menuIcons/CAM.png b/icons/darkredNG/menuIcons/CAM.png
new file mode 100644
index 0000000..a394877
Binary files /dev/null and b/icons/darkredNG/menuIcons/CAM.png differ
diff --git a/icons/darkredNG/menuIcons/Channels.png b/icons/darkredNG/menuIcons/Channels.png
new file mode 100644
index 0000000..ba2ba78
Binary files /dev/null and b/icons/darkredNG/menuIcons/Channels.png differ
diff --git a/icons/darkredNG/menuIcons/Commands.png b/icons/darkredNG/menuIcons/Commands.png
new file mode 100644
index 0000000..c6a83ef
Binary files /dev/null and b/icons/darkredNG/menuIcons/Commands.png differ
diff --git a/icons/darkredNG/menuIcons/DVB.png b/icons/darkredNG/menuIcons/DVB.png
new file mode 100644
index 0000000..3789145
Binary files /dev/null and b/icons/darkredNG/menuIcons/DVB.png differ
diff --git a/icons/darkredNG/menuIcons/EPG.png b/icons/darkredNG/menuIcons/EPG.png
new file mode 100644
index 0000000..e868b90
Binary files /dev/null and b/icons/darkredNG/menuIcons/EPG.png differ
diff --git a/icons/darkredNG/menuIcons/LNB.png b/icons/darkredNG/menuIcons/LNB.png
new file mode 100644
index 0000000..896dd99
Binary files /dev/null and b/icons/darkredNG/menuIcons/LNB.png differ
diff --git a/icons/darkredNG/menuIcons/Miscellaneous.png b/icons/darkredNG/menuIcons/Miscellaneous.png
new file mode 100644
index 0000000..2a41c4d
Binary files /dev/null and b/icons/darkredNG/menuIcons/Miscellaneous.png differ
diff --git a/icons/darkredNG/menuIcons/OSD.png b/icons/darkredNG/menuIcons/OSD.png
new file mode 100644
index 0000000..8f571c6
Binary files /dev/null and b/icons/darkredNG/menuIcons/OSD.png differ
diff --git a/icons/darkredNG/menuIcons/Plugins.png b/icons/darkredNG/menuIcons/Plugins.png
new file mode 100644
index 0000000..3fcba70
Binary files /dev/null and b/icons/darkredNG/menuIcons/Plugins.png differ
diff --git a/icons/darkredNG/menuIcons/Recording.png b/icons/darkredNG/menuIcons/Recording.png
new file mode 100644
index 0000000..741b1af
Binary files /dev/null and b/icons/darkredNG/menuIcons/Recording.png differ
diff --git a/icons/darkredNG/menuIcons/Recordings.png b/icons/darkredNG/menuIcons/Recordings.png
new file mode 100644
index 0000000..79aeeb7
Binary files /dev/null and b/icons/darkredNG/menuIcons/Recordings.png differ
diff --git a/icons/darkredNG/menuIcons/Replay.png b/icons/darkredNG/menuIcons/Replay.png
new file mode 100644
index 0000000..621596c
Binary files /dev/null and b/icons/darkredNG/menuIcons/Replay.png differ
diff --git a/icons/darkredNG/menuIcons/Restart.png b/icons/darkredNG/menuIcons/Restart.png
new file mode 100644
index 0000000..aa23cd4
Binary files /dev/null and b/icons/darkredNG/menuIcons/Restart.png differ
diff --git a/icons/darkredNG/menuIcons/Schedule.png b/icons/darkredNG/menuIcons/Schedule.png
new file mode 100644
index 0000000..3a98cac
Binary files /dev/null and b/icons/darkredNG/menuIcons/Schedule.png differ
diff --git a/icons/darkredNG/menuIcons/Setup.png b/icons/darkredNG/menuIcons/Setup.png
new file mode 100644
index 0000000..d121148
Binary files /dev/null and b/icons/darkredNG/menuIcons/Setup.png differ
diff --git a/icons/darkredNG/menuIcons/StopRecording.png b/icons/darkredNG/menuIcons/StopRecording.png
new file mode 100644
index 0000000..ed83fbb
Binary files /dev/null and b/icons/darkredNG/menuIcons/StopRecording.png differ
diff --git a/icons/darkredNG/menuIcons/StopReplay.png b/icons/darkredNG/menuIcons/StopReplay.png
new file mode 100644
index 0000000..9192760
Binary files /dev/null and b/icons/darkredNG/menuIcons/StopReplay.png differ
diff --git a/icons/darkredNG/menuIcons/Timers.png b/icons/darkredNG/menuIcons/Timers.png
new file mode 100644
index 0000000..b866c36
Binary files /dev/null and b/icons/darkredNG/menuIcons/Timers.png differ
diff --git a/icons/darkredNG/pluginIcons/admin.png b/icons/darkredNG/pluginIcons/admin.png
new file mode 100644
index 0000000..cf328ef
Binary files /dev/null and b/icons/darkredNG/pluginIcons/admin.png differ
diff --git a/icons/darkredNG/pluginIcons/arghdirector.png b/icons/darkredNG/pluginIcons/arghdirector.png
new file mode 100644
index 0000000..bbd221a
Binary files /dev/null and b/icons/darkredNG/pluginIcons/arghdirector.png differ
diff --git a/icons/darkredNG/pluginIcons/autostart.png b/icons/darkredNG/pluginIcons/autostart.png
new file mode 100644
index 0000000..6fdb1bb
Binary files /dev/null and b/icons/darkredNG/pluginIcons/autostart.png differ
diff --git a/icons/darkredNG/pluginIcons/avahi4vdr.png b/icons/darkredNG/pluginIcons/avahi4vdr.png
new file mode 100644
index 0000000..044e71d
Binary files /dev/null and b/icons/darkredNG/pluginIcons/avahi4vdr.png differ
diff --git a/icons/darkredNG/pluginIcons/avards.png b/icons/darkredNG/pluginIcons/avards.png
new file mode 100644
index 0000000..cf8d037
Binary files /dev/null and b/icons/darkredNG/pluginIcons/avards.png differ
diff --git a/icons/darkredNG/pluginIcons/block.png b/icons/darkredNG/pluginIcons/block.png
new file mode 100644
index 0000000..86127c2
Binary files /dev/null and b/icons/darkredNG/pluginIcons/block.png differ
diff --git a/icons/darkredNG/pluginIcons/burn.png b/icons/darkredNG/pluginIcons/burn.png
new file mode 100644
index 0000000..305d7ff
Binary files /dev/null and b/icons/darkredNG/pluginIcons/burn.png differ
diff --git a/icons/darkredNG/pluginIcons/cdplayer.png b/icons/darkredNG/pluginIcons/cdplayer.png
new file mode 100644
index 0000000..89a6c19
Binary files /dev/null and b/icons/darkredNG/pluginIcons/cdplayer.png differ
diff --git a/icons/darkredNG/pluginIcons/chanman.png b/icons/darkredNG/pluginIcons/chanman.png
new file mode 100644
index 0000000..a73e83c
Binary files /dev/null and b/icons/darkredNG/pluginIcons/chanman.png differ
diff --git a/icons/darkredNG/pluginIcons/check.png b/icons/darkredNG/pluginIcons/check.png
new file mode 100644
index 0000000..d487a24
Binary files /dev/null and b/icons/darkredNG/pluginIcons/check.png differ
diff --git a/icons/darkredNG/pluginIcons/conflictcheckonly.png b/icons/darkredNG/pluginIcons/conflictcheckonly.png
new file mode 100644
index 0000000..7f832bd
Binary files /dev/null and b/icons/darkredNG/pluginIcons/conflictcheckonly.png differ
diff --git a/icons/darkredNG/pluginIcons/ddci.png b/icons/darkredNG/pluginIcons/ddci.png
new file mode 100644
index 0000000..4ad459c
Binary files /dev/null and b/icons/darkredNG/pluginIcons/ddci.png differ
diff --git a/icons/darkredNG/pluginIcons/devstatus.png b/icons/darkredNG/pluginIcons/devstatus.png
new file mode 100644
index 0000000..96c0ec1
Binary files /dev/null and b/icons/darkredNG/pluginIcons/devstatus.png differ
diff --git a/icons/darkredNG/pluginIcons/dummydevice.png b/icons/darkredNG/pluginIcons/dummydevice.png
new file mode 100644
index 0000000..11fd707
Binary files /dev/null and b/icons/darkredNG/pluginIcons/dummydevice.png differ
diff --git a/icons/darkredNG/pluginIcons/duplicates.png b/icons/darkredNG/pluginIcons/duplicates.png
new file mode 100644
index 0000000..dc1be57
Binary files /dev/null and b/icons/darkredNG/pluginIcons/duplicates.png differ
diff --git a/icons/darkredNG/pluginIcons/dvbapi.png b/icons/darkredNG/pluginIcons/dvbapi.png
new file mode 100644
index 0000000..b966461
Binary files /dev/null and b/icons/darkredNG/pluginIcons/dvbapi.png differ
diff --git a/icons/darkredNG/pluginIcons/dvbhddevice.png b/icons/darkredNG/pluginIcons/dvbhddevice.png
new file mode 100644
index 0000000..b874297
Binary files /dev/null and b/icons/darkredNG/pluginIcons/dvbhddevice.png differ
diff --git a/icons/darkredNG/pluginIcons/dvbsddevice.png b/icons/darkredNG/pluginIcons/dvbsddevice.png
new file mode 100644
index 0000000..106184e
Binary files /dev/null and b/icons/darkredNG/pluginIcons/dvbsddevice.png differ
diff --git a/icons/darkredNG/pluginIcons/dynamite.png b/icons/darkredNG/pluginIcons/dynamite.png
new file mode 100644
index 0000000..28ea35a
Binary files /dev/null and b/icons/darkredNG/pluginIcons/dynamite.png differ
diff --git a/icons/darkredNG/pluginIcons/eepg.png b/icons/darkredNG/pluginIcons/eepg.png
new file mode 100644
index 0000000..3938b96
Binary files /dev/null and b/icons/darkredNG/pluginIcons/eepg.png differ
diff --git a/icons/darkredNG/pluginIcons/epg2vdr.png b/icons/darkredNG/pluginIcons/epg2vdr.png
new file mode 100644
index 0000000..ac8757e
Binary files /dev/null and b/icons/darkredNG/pluginIcons/epg2vdr.png differ
diff --git a/icons/darkredNG/pluginIcons/epgsearch.png b/icons/darkredNG/pluginIcons/epgsearch.png
new file mode 100644
index 0000000..5eab415
Binary files /dev/null and b/icons/darkredNG/pluginIcons/epgsearch.png differ
diff --git a/icons/darkredNG/pluginIcons/epgsearchonly.png b/icons/darkredNG/pluginIcons/epgsearchonly.png
new file mode 100644
index 0000000..b5186e7
Binary files /dev/null and b/icons/darkredNG/pluginIcons/epgsearchonly.png differ
diff --git a/icons/darkredNG/pluginIcons/epgsync.png b/icons/darkredNG/pluginIcons/epgsync.png
new file mode 100644
index 0000000..5c14009
Binary files /dev/null and b/icons/darkredNG/pluginIcons/epgsync.png differ
diff --git a/icons/darkredNG/pluginIcons/externalplayer.png b/icons/darkredNG/pluginIcons/externalplayer.png
new file mode 100644
index 0000000..2bd67db
Binary files /dev/null and b/icons/darkredNG/pluginIcons/externalplayer.png differ
diff --git a/icons/darkredNG/pluginIcons/extrecmenu.png b/icons/darkredNG/pluginIcons/extrecmenu.png
new file mode 100644
index 0000000..6f613f1
Binary files /dev/null and b/icons/darkredNG/pluginIcons/extrecmenu.png differ
diff --git a/icons/darkredNG/pluginIcons/favorites.png b/icons/darkredNG/pluginIcons/favorites.png
new file mode 100644
index 0000000..409c852
Binary files /dev/null and b/icons/darkredNG/pluginIcons/favorites.png differ
diff --git a/icons/darkredNG/pluginIcons/femon.png b/icons/darkredNG/pluginIcons/femon.png
new file mode 100644
index 0000000..e87b711
Binary files /dev/null and b/icons/darkredNG/pluginIcons/femon.png differ
diff --git a/icons/darkredNG/pluginIcons/fepg.png b/icons/darkredNG/pluginIcons/fepg.png
new file mode 100644
index 0000000..65023ed
Binary files /dev/null and b/icons/darkredNG/pluginIcons/fepg.png differ
diff --git a/icons/darkredNG/pluginIcons/filebrowser.png b/icons/darkredNG/pluginIcons/filebrowser.png
new file mode 100644
index 0000000..d3f90e0
Binary files /dev/null and b/icons/darkredNG/pluginIcons/filebrowser.png differ
diff --git a/icons/darkredNG/pluginIcons/fritzbox.png b/icons/darkredNG/pluginIcons/fritzbox.png
new file mode 100644
index 0000000..7bfc229
Binary files /dev/null and b/icons/darkredNG/pluginIcons/fritzbox.png differ
diff --git a/icons/darkredNG/pluginIcons/graphlcd.png b/icons/darkredNG/pluginIcons/graphlcd.png
new file mode 100644
index 0000000..39ffd35
Binary files /dev/null and b/icons/darkredNG/pluginIcons/graphlcd.png differ
diff --git a/icons/darkredNG/pluginIcons/graphtft.png b/icons/darkredNG/pluginIcons/graphtft.png
new file mode 100644
index 0000000..39ffd35
Binary files /dev/null and b/icons/darkredNG/pluginIcons/graphtft.png differ
diff --git a/icons/darkredNG/pluginIcons/image.png b/icons/darkredNG/pluginIcons/image.png
new file mode 100644
index 0000000..33644e0
Binary files /dev/null and b/icons/darkredNG/pluginIcons/image.png differ
diff --git a/icons/darkredNG/pluginIcons/imonlcd.png b/icons/darkredNG/pluginIcons/imonlcd.png
new file mode 100644
index 0000000..3d34fc4
Binary files /dev/null and b/icons/darkredNG/pluginIcons/imonlcd.png differ
diff --git a/icons/darkredNG/pluginIcons/iptv.png b/icons/darkredNG/pluginIcons/iptv.png
new file mode 100644
index 0000000..4494ddc
Binary files /dev/null and b/icons/darkredNG/pluginIcons/iptv.png differ
diff --git a/icons/darkredNG/pluginIcons/lcdproc.png b/icons/darkredNG/pluginIcons/lcdproc.png
new file mode 100644
index 0000000..3d34fc4
Binary files /dev/null and b/icons/darkredNG/pluginIcons/lcdproc.png differ
diff --git a/icons/darkredNG/pluginIcons/mailbox.png b/icons/darkredNG/pluginIcons/mailbox.png
new file mode 100644
index 0000000..1bc76e8
Binary files /dev/null and b/icons/darkredNG/pluginIcons/mailbox.png differ
diff --git a/icons/darkredNG/pluginIcons/makemkv.png b/icons/darkredNG/pluginIcons/makemkv.png
new file mode 100644
index 0000000..41cddf1
Binary files /dev/null and b/icons/darkredNG/pluginIcons/makemkv.png differ
diff --git a/icons/darkredNG/pluginIcons/markad.png b/icons/darkredNG/pluginIcons/markad.png
new file mode 100644
index 0000000..b3defaf
Binary files /dev/null and b/icons/darkredNG/pluginIcons/markad.png differ
diff --git a/icons/darkredNG/pluginIcons/mlist.png b/icons/darkredNG/pluginIcons/mlist.png
new file mode 100644
index 0000000..19c367f
Binary files /dev/null and b/icons/darkredNG/pluginIcons/mlist.png differ
diff --git a/icons/darkredNG/pluginIcons/music.png b/icons/darkredNG/pluginIcons/music.png
new file mode 100644
index 0000000..abb012e
Binary files /dev/null and b/icons/darkredNG/pluginIcons/music.png differ
diff --git a/icons/darkredNG/pluginIcons/noepg.png b/icons/darkredNG/pluginIcons/noepg.png
new file mode 100644
index 0000000..eb9410d
Binary files /dev/null and b/icons/darkredNG/pluginIcons/noepg.png differ
diff --git a/icons/darkredNG/pluginIcons/nordlichtsepg.png b/icons/darkredNG/pluginIcons/nordlichtsepg.png
new file mode 100644
index 0000000..3ee3fa2
Binary files /dev/null and b/icons/darkredNG/pluginIcons/nordlichtsepg.png differ
diff --git a/icons/darkredNG/pluginIcons/osdteletext.png b/icons/darkredNG/pluginIcons/osdteletext.png
new file mode 100644
index 0000000..664e770
Binary files /dev/null and b/icons/darkredNG/pluginIcons/osdteletext.png differ
diff --git a/icons/darkredNG/pluginIcons/peer.png b/icons/darkredNG/pluginIcons/peer.png
new file mode 100644
index 0000000..998d568
Binary files /dev/null and b/icons/darkredNG/pluginIcons/peer.png differ
diff --git a/icons/darkredNG/pluginIcons/play.png b/icons/darkredNG/pluginIcons/play.png
new file mode 100644
index 0000000..2848fc6
Binary files /dev/null and b/icons/darkredNG/pluginIcons/play.png differ
diff --git a/icons/darkredNG/pluginIcons/pvrinput.png b/icons/darkredNG/pluginIcons/pvrinput.png
new file mode 100644
index 0000000..724f698
Binary files /dev/null and b/icons/darkredNG/pluginIcons/pvrinput.png differ
diff --git a/icons/darkredNG/pluginIcons/quickepgsearch.png b/icons/darkredNG/pluginIcons/quickepgsearch.png
new file mode 100644
index 0000000..76a31f4
Binary files /dev/null and b/icons/darkredNG/pluginIcons/quickepgsearch.png differ
diff --git a/icons/darkredNG/pluginIcons/radio.png b/icons/darkredNG/pluginIcons/radio.png
new file mode 100644
index 0000000..193b7d4
Binary files /dev/null and b/icons/darkredNG/pluginIcons/radio.png differ
diff --git a/icons/darkredNG/pluginIcons/remote.png b/icons/darkredNG/pluginIcons/remote.png
new file mode 100644
index 0000000..7f46b1b
Binary files /dev/null and b/icons/darkredNG/pluginIcons/remote.png differ
diff --git a/icons/darkredNG/pluginIcons/remotetimers.png b/icons/darkredNG/pluginIcons/remotetimers.png
new file mode 100644
index 0000000..fae3b79
Binary files /dev/null and b/icons/darkredNG/pluginIcons/remotetimers.png differ
diff --git a/icons/darkredNG/pluginIcons/rssreader.png b/icons/darkredNG/pluginIcons/rssreader.png
new file mode 100644
index 0000000..db538f0
Binary files /dev/null and b/icons/darkredNG/pluginIcons/rssreader.png differ
diff --git a/icons/darkredNG/pluginIcons/sc.png b/icons/darkredNG/pluginIcons/sc.png
new file mode 100644
index 0000000..2472d6c
Binary files /dev/null and b/icons/darkredNG/pluginIcons/sc.png differ
diff --git a/icons/darkredNG/pluginIcons/screenshot.png b/icons/darkredNG/pluginIcons/screenshot.png
new file mode 100644
index 0000000..be9b4d5
Binary files /dev/null and b/icons/darkredNG/pluginIcons/screenshot.png differ
diff --git a/icons/darkredNG/pluginIcons/seduatmo.png b/icons/darkredNG/pluginIcons/seduatmo.png
new file mode 100644
index 0000000..4b5292f
Binary files /dev/null and b/icons/darkredNG/pluginIcons/seduatmo.png differ
diff --git a/icons/darkredNG/pluginIcons/skyselectfeeds.png b/icons/darkredNG/pluginIcons/skyselectfeeds.png
new file mode 100644
index 0000000..d81a024
Binary files /dev/null and b/icons/darkredNG/pluginIcons/skyselectfeeds.png differ
diff --git a/icons/darkredNG/pluginIcons/sleeptimer.png b/icons/darkredNG/pluginIcons/sleeptimer.png
new file mode 100644
index 0000000..cd4956f
Binary files /dev/null and b/icons/darkredNG/pluginIcons/sleeptimer.png differ
diff --git a/icons/darkredNG/pluginIcons/softhddevice.png b/icons/darkredNG/pluginIcons/softhddevice.png
new file mode 100644
index 0000000..df13f2c
Binary files /dev/null and b/icons/darkredNG/pluginIcons/softhddevice.png differ
diff --git a/icons/darkredNG/pluginIcons/streamdev-server.png b/icons/darkredNG/pluginIcons/streamdev-server.png
new file mode 100644
index 0000000..e89ed8b
Binary files /dev/null and b/icons/darkredNG/pluginIcons/streamdev-server.png differ
diff --git a/icons/darkredNG/pluginIcons/systeminfo.png b/icons/darkredNG/pluginIcons/systeminfo.png
new file mode 100644
index 0000000..b14763f
Binary files /dev/null and b/icons/darkredNG/pluginIcons/systeminfo.png differ
diff --git a/icons/darkredNG/pluginIcons/targavfd.png b/icons/darkredNG/pluginIcons/targavfd.png
new file mode 100644
index 0000000..e91b111
Binary files /dev/null and b/icons/darkredNG/pluginIcons/targavfd.png differ
diff --git a/icons/darkredNG/pluginIcons/trayopenng.png b/icons/darkredNG/pluginIcons/trayopenng.png
new file mode 100644
index 0000000..6ebd17d
Binary files /dev/null and b/icons/darkredNG/pluginIcons/trayopenng.png differ
diff --git a/icons/darkredNG/pluginIcons/tvguide.png b/icons/darkredNG/pluginIcons/tvguide.png
new file mode 100644
index 0000000..968a37c
Binary files /dev/null and b/icons/darkredNG/pluginIcons/tvguide.png differ
diff --git a/icons/darkredNG/pluginIcons/tvm2vdr.png b/icons/darkredNG/pluginIcons/tvm2vdr.png
new file mode 100644
index 0000000..47f9a91
Binary files /dev/null and b/icons/darkredNG/pluginIcons/tvm2vdr.png differ
diff --git a/icons/darkredNG/pluginIcons/tvscraper.png b/icons/darkredNG/pluginIcons/tvscraper.png
new file mode 100644
index 0000000..a106cb5
Binary files /dev/null and b/icons/darkredNG/pluginIcons/tvscraper.png differ
diff --git a/icons/darkredNG/pluginIcons/undelete.png b/icons/darkredNG/pluginIcons/undelete.png
new file mode 100644
index 0000000..a53d50a
Binary files /dev/null and b/icons/darkredNG/pluginIcons/undelete.png differ
diff --git a/icons/darkredNG/pluginIcons/weatherng.png b/icons/darkredNG/pluginIcons/weatherng.png
new file mode 100644
index 0000000..a88f11d
Binary files /dev/null and b/icons/darkredNG/pluginIcons/weatherng.png differ
diff --git a/icons/darkredNG/pluginIcons/xmltv2vdr.png b/icons/darkredNG/pluginIcons/xmltv2vdr.png
new file mode 100644
index 0000000..ea73c74
Binary files /dev/null and b/icons/darkredNG/pluginIcons/xmltv2vdr.png differ
diff --git a/icons/darkredNG/pluginIcons/yaepghg.png b/icons/darkredNG/pluginIcons/yaepghg.png
new file mode 100644
index 0000000..53ce443
Binary files /dev/null and b/icons/darkredNG/pluginIcons/yaepghg.png differ
diff --git a/icons/darkredNG/skinElements/buttonblue.png b/icons/darkredNG/skinElements/buttonblue.png
new file mode 100644
index 0000000..82dc634
Binary files /dev/null and b/icons/darkredNG/skinElements/buttonblue.png differ
diff --git a/icons/darkredNG/skinElements/buttongreen.png b/icons/darkredNG/skinElements/buttongreen.png
new file mode 100644
index 0000000..ce8fe22
Binary files /dev/null and b/icons/darkredNG/skinElements/buttongreen.png differ
diff --git a/icons/darkredNG/skinElements/buttonred.png b/icons/darkredNG/skinElements/buttonred.png
new file mode 100644
index 0000000..9660a3e
Binary files /dev/null and b/icons/darkredNG/skinElements/buttonred.png differ
diff --git a/icons/darkredNG/skinElements/buttonyellow.png b/icons/darkredNG/skinElements/buttonyellow.png
new file mode 100644
index 0000000..a51ea7a
Binary files /dev/null and b/icons/darkredNG/skinElements/buttonyellow.png differ
diff --git a/icons/darkredNG/skinElements/channellogoback.png b/icons/darkredNG/skinElements/channellogoback.png
new file mode 100644
index 0000000..79357af
Binary files /dev/null and b/icons/darkredNG/skinElements/channellogoback.png differ
diff --git a/icons/darkredNG/skinElements/displaychannelback.png b/icons/darkredNG/skinElements/displaychannelback.png
new file mode 100644
index 0000000..672144f
Binary files /dev/null and b/icons/darkredNG/skinElements/displaychannelback.png differ
diff --git a/icons/darkredNG/skinElements/displaychannelback_right.png b/icons/darkredNG/skinElements/displaychannelback_right.png
new file mode 100644
index 0000000..cb7d4e7
Binary files /dev/null and b/icons/darkredNG/skinElements/displaychannelback_right.png differ
diff --git a/icons/darkredNG/skinElements/displaychanneltop.png b/icons/darkredNG/skinElements/displaychanneltop.png
new file mode 100644
index 0000000..38a99f8
Binary files /dev/null and b/icons/darkredNG/skinElements/displaychanneltop.png differ
diff --git a/icons/darkredNG/skinElements/displaychanneltop_right.png b/icons/darkredNG/skinElements/displaychanneltop_right.png
new file mode 100644
index 0000000..d156e51
Binary files /dev/null and b/icons/darkredNG/skinElements/displaychanneltop_right.png differ
diff --git a/icons/darkredNG/skinElements/displayreplayback.png b/icons/darkredNG/skinElements/displayreplayback.png
new file mode 100644
index 0000000..923dedb
Binary files /dev/null and b/icons/darkredNG/skinElements/displayreplayback.png differ
diff --git a/icons/darkredNG/skinElements/displayvolume.png b/icons/darkredNG/skinElements/displayvolume.png
new file mode 100644
index 0000000..8e81f14
Binary files /dev/null and b/icons/darkredNG/skinElements/displayvolume.png differ
diff --git a/icons/darkredNG/skinElements/header_mirroredback.png b/icons/darkredNG/skinElements/header_mirroredback.png
new file mode 100644
index 0000000..42919d9
Binary files /dev/null and b/icons/darkredNG/skinElements/header_mirroredback.png differ
diff --git a/icons/darkredNG/skinElements/header_mirroredtop.png b/icons/darkredNG/skinElements/header_mirroredtop.png
new file mode 100644
index 0000000..16053e9
Binary files /dev/null and b/icons/darkredNG/skinElements/header_mirroredtop.png differ
diff --git a/icons/darkredNG/skinElements/headerback.png b/icons/darkredNG/skinElements/headerback.png
new file mode 100644
index 0000000..dafff9e
Binary files /dev/null and b/icons/darkredNG/skinElements/headerback.png differ
diff --git a/icons/darkredNG/skinElements/headertop.png b/icons/darkredNG/skinElements/headertop.png
new file mode 100644
index 0000000..d6eb813
Binary files /dev/null and b/icons/darkredNG/skinElements/headertop.png differ
diff --git a/icons/darkredNG/skinElements/menubutton.png b/icons/darkredNG/skinElements/menubutton.png
new file mode 100644
index 0000000..4afbbbb
Binary files /dev/null and b/icons/darkredNG/skinElements/menubutton.png differ
diff --git a/icons/darkredNG/skinElements/menubuttonactive.png b/icons/darkredNG/skinElements/menubuttonactive.png
new file mode 100644
index 0000000..b461791
Binary files /dev/null and b/icons/darkredNG/skinElements/menubuttonactive.png differ
diff --git a/icons/darkredNG/skinElements/menubuttondefault.png b/icons/darkredNG/skinElements/menubuttondefault.png
new file mode 100644
index 0000000..9ef37ec
Binary files /dev/null and b/icons/darkredNG/skinElements/menubuttondefault.png differ
diff --git a/icons/darkredNG/skinElements/menubuttondefaultactive.png b/icons/darkredNG/skinElements/menubuttondefaultactive.png
new file mode 100644
index 0000000..09ab466
Binary files /dev/null and b/icons/darkredNG/skinElements/menubuttondefaultactive.png differ
diff --git a/icons/darkredNG/skinElements/messageError.png b/icons/darkredNG/skinElements/messageError.png
new file mode 100644
index 0000000..e6047f0
Binary files /dev/null and b/icons/darkredNG/skinElements/messageError.png differ
diff --git a/icons/darkredNG/skinElements/messageInfo.png b/icons/darkredNG/skinElements/messageInfo.png
new file mode 100644
index 0000000..d335003
Binary files /dev/null and b/icons/darkredNG/skinElements/messageInfo.png differ
diff --git a/icons/darkredNG/skinElements/messageStatus.png b/icons/darkredNG/skinElements/messageStatus.png
new file mode 100644
index 0000000..f455b5d
Binary files /dev/null and b/icons/darkredNG/skinElements/messageStatus.png differ
diff --git a/icons/darkredNG/skinElements/messageWarning.png b/icons/darkredNG/skinElements/messageWarning.png
new file mode 100644
index 0000000..32e1598
Binary files /dev/null and b/icons/darkredNG/skinElements/messageWarning.png differ
diff --git a/icons/darkredNG/skinElements/scrollbar.png b/icons/darkredNG/skinElements/scrollbar.png
new file mode 100644
index 0000000..2243776
Binary files /dev/null and b/icons/darkredNG/skinElements/scrollbar.png differ
diff --git a/icons/darkredNG/skinIcons/Channelseparator.png b/icons/darkredNG/skinIcons/Channelseparator.png
new file mode 100644
index 0000000..90225ae
Binary files /dev/null and b/icons/darkredNG/skinIcons/Channelseparator.png differ
diff --git a/icons/darkredNG/skinIcons/DiskUsage.png b/icons/darkredNG/skinIcons/DiskUsage.png
new file mode 100644
index 0000000..de1dfbb
Binary files /dev/null and b/icons/darkredNG/skinIcons/DiskUsage.png differ
diff --git a/icons/darkredNG/skinIcons/ac3.png b/icons/darkredNG/skinIcons/ac3.png
new file mode 100644
index 0000000..5b8614a
Binary files /dev/null and b/icons/darkredNG/skinIcons/ac3.png differ
diff --git a/icons/darkredNG/skinIcons/activetimer.png b/icons/darkredNG/skinIcons/activetimer.png
new file mode 100644
index 0000000..af4c33c
Binary files /dev/null and b/icons/darkredNG/skinIcons/activetimer.png differ
diff --git a/icons/darkredNG/skinIcons/activetimersmall.png b/icons/darkredNG/skinIcons/activetimersmall.png
new file mode 100644
index 0000000..324ce85
Binary files /dev/null and b/icons/darkredNG/skinIcons/activetimersmall.png differ
diff --git a/icons/darkredNG/skinIcons/arrowLeftChannelSep.png b/icons/darkredNG/skinIcons/arrowLeftChannelSep.png
new file mode 100644
index 0000000..2c83c46
Binary files /dev/null and b/icons/darkredNG/skinIcons/arrowLeftChannelSep.png differ
diff --git a/icons/darkredNG/skinIcons/arrowRightChannelSep.png b/icons/darkredNG/skinIcons/arrowRightChannelSep.png
new file mode 100644
index 0000000..6ae7e00
Binary files /dev/null and b/icons/darkredNG/skinIcons/arrowRightChannelSep.png differ
diff --git a/icons/darkredNG/skinIcons/channeldelimiter.png b/icons/darkredNG/skinIcons/channeldelimiter.png
new file mode 100644
index 0000000..5212dae
Binary files /dev/null and b/icons/darkredNG/skinIcons/channeldelimiter.png differ
diff --git a/icons/darkredNG/skinIcons/crypted.png b/icons/darkredNG/skinIcons/crypted.png
new file mode 100644
index 0000000..8c7c351
Binary files /dev/null and b/icons/darkredNG/skinIcons/crypted.png differ
diff --git a/icons/darkredNG/skinIcons/daydelimiter.png b/icons/darkredNG/skinIcons/daydelimiter.png
new file mode 100644
index 0000000..7ae6053
Binary files /dev/null and b/icons/darkredNG/skinIcons/daydelimiter.png differ
diff --git a/icons/darkredNG/skinIcons/defaultPoster.png b/icons/darkredNG/skinIcons/defaultPoster.png
new file mode 100644
index 0000000..ba7e4df
Binary files /dev/null and b/icons/darkredNG/skinIcons/defaultPoster.png differ
diff --git a/icons/darkredNG/skinIcons/discpercent.png b/icons/darkredNG/skinIcons/discpercent.png
new file mode 100644
index 0000000..949fbc7
Binary files /dev/null and b/icons/darkredNG/skinIcons/discpercent.png differ
diff --git a/icons/darkredNG/skinIcons/dolbyoff - Kopie.png b/icons/darkredNG/skinIcons/dolbyoff - Kopie.png
new file mode 100644
index 0000000..ef4f17c
Binary files /dev/null and b/icons/darkredNG/skinIcons/dolbyoff - Kopie.png differ
diff --git a/icons/darkredNG/skinIcons/dolbyoff.png b/icons/darkredNG/skinIcons/dolbyoff.png
new file mode 100644
index 0000000..895bd94
Binary files /dev/null and b/icons/darkredNG/skinIcons/dolbyoff.png differ
diff --git a/icons/darkredNG/skinIcons/dolbyon.png b/icons/darkredNG/skinIcons/dolbyon.png
new file mode 100644
index 0000000..555b409
Binary files /dev/null and b/icons/darkredNG/skinIcons/dolbyon.png differ
diff --git a/icons/darkredNG/skinIcons/encrypted.png b/icons/darkredNG/skinIcons/encrypted.png
new file mode 100644
index 0000000..2b6345a
Binary files /dev/null and b/icons/darkredNG/skinIcons/encrypted.png differ
diff --git a/icons/darkredNG/skinIcons/fta - Kopie.png b/icons/darkredNG/skinIcons/fta - Kopie.png
new file mode 100644
index 0000000..55e3789
Binary files /dev/null and b/icons/darkredNG/skinIcons/fta - Kopie.png differ
diff --git a/icons/darkredNG/skinIcons/fta.png b/icons/darkredNG/skinIcons/fta.png
new file mode 100644
index 0000000..5e5a1c4
Binary files /dev/null and b/icons/darkredNG/skinIcons/fta.png differ
diff --git a/icons/darkredNG/skinIcons/fwd.png b/icons/darkredNG/skinIcons/fwd.png
new file mode 100644
index 0000000..b12409d
Binary files /dev/null and b/icons/darkredNG/skinIcons/fwd.png differ
diff --git a/icons/darkredNG/skinIcons/fwdInactive.png b/icons/darkredNG/skinIcons/fwdInactive.png
new file mode 100644
index 0000000..cb551c2
Binary files /dev/null and b/icons/darkredNG/skinIcons/fwdInactive.png differ
diff --git a/icons/darkredNG/skinIcons/fwdx1.png b/icons/darkredNG/skinIcons/fwdx1.png
new file mode 100644
index 0000000..f4ef710
Binary files /dev/null and b/icons/darkredNG/skinIcons/fwdx1.png differ
diff --git a/icons/darkredNG/skinIcons/fwdx2.png b/icons/darkredNG/skinIcons/fwdx2.png
new file mode 100644
index 0000000..344a243
Binary files /dev/null and b/icons/darkredNG/skinIcons/fwdx2.png differ
diff --git a/icons/darkredNG/skinIcons/fwdx3.png b/icons/darkredNG/skinIcons/fwdx3.png
new file mode 100644
index 0000000..05d29e8
Binary files /dev/null and b/icons/darkredNG/skinIcons/fwdx3.png differ
diff --git a/icons/darkredNG/skinIcons/hd1080i.png b/icons/darkredNG/skinIcons/hd1080i.png
new file mode 100644
index 0000000..8a44156
Binary files /dev/null and b/icons/darkredNG/skinIcons/hd1080i.png differ
diff --git a/icons/darkredNG/skinIcons/hd1080i_rec.png b/icons/darkredNG/skinIcons/hd1080i_rec.png
new file mode 100644
index 0000000..7c687d3
Binary files /dev/null and b/icons/darkredNG/skinIcons/hd1080i_rec.png differ
diff --git a/icons/darkredNG/skinIcons/hd720p.png b/icons/darkredNG/skinIcons/hd720p.png
new file mode 100644
index 0000000..2fa9baf
Binary files /dev/null and b/icons/darkredNG/skinIcons/hd720p.png differ
diff --git a/icons/darkredNG/skinIcons/hd720p_rec.png b/icons/darkredNG/skinIcons/hd720p_rec.png
new file mode 100644
index 0000000..6bd11e6
Binary files /dev/null and b/icons/darkredNG/skinIcons/hd720p_rec.png differ
diff --git a/icons/darkredNG/skinIcons/newrecording.png b/icons/darkredNG/skinIcons/newrecording.png
new file mode 100644
index 0000000..b9166ba
Binary files /dev/null and b/icons/darkredNG/skinIcons/newrecording.png differ
diff --git a/icons/darkredNG/skinIcons/pause.png b/icons/darkredNG/skinIcons/pause.png
new file mode 100644
index 0000000..fc9ce48
Binary files /dev/null and b/icons/darkredNG/skinIcons/pause.png differ
diff --git a/icons/darkredNG/skinIcons/pauseInactive.png b/icons/darkredNG/skinIcons/pauseInactive.png
new file mode 100644
index 0000000..f9a9d94
Binary files /dev/null and b/icons/darkredNG/skinIcons/pauseInactive.png differ
diff --git a/icons/darkredNG/skinIcons/play.png b/icons/darkredNG/skinIcons/play.png
new file mode 100644
index 0000000..0fa1c5a
Binary files /dev/null and b/icons/darkredNG/skinIcons/play.png differ
diff --git a/icons/darkredNG/skinIcons/playInactive.png b/icons/darkredNG/skinIcons/playInactive.png
new file mode 100644
index 0000000..7fb820a
Binary files /dev/null and b/icons/darkredNG/skinIcons/playInactive.png differ
diff --git a/icons/darkredNG/skinIcons/radio.png b/icons/darkredNG/skinIcons/radio.png
new file mode 100644
index 0000000..19116d8
Binary files /dev/null and b/icons/darkredNG/skinIcons/radio.png differ
diff --git a/icons/darkredNG/skinIcons/recfolder.png b/icons/darkredNG/skinIcons/recfolder.png
new file mode 100644
index 0000000..e3df65b
Binary files /dev/null and b/icons/darkredNG/skinIcons/recfolder.png differ
diff --git a/icons/darkredNG/skinIcons/recoff.png b/icons/darkredNG/skinIcons/recoff.png
new file mode 100644
index 0000000..f7355aa
Binary files /dev/null and b/icons/darkredNG/skinIcons/recoff.png differ
diff --git a/icons/darkredNG/skinIcons/recon.png b/icons/darkredNG/skinIcons/recon.png
new file mode 100644
index 0000000..9dd4d10
Binary files /dev/null and b/icons/darkredNG/skinIcons/recon.png differ
diff --git a/icons/darkredNG/skinIcons/recordingcutted.png b/icons/darkredNG/skinIcons/recordingcutted.png
new file mode 100644
index 0000000..b90c9c1
Binary files /dev/null and b/icons/darkredNG/skinIcons/recordingcutted.png differ
diff --git a/icons/darkredNG/skinIcons/recordingdatetime.png b/icons/darkredNG/skinIcons/recordingdatetime.png
new file mode 100644
index 0000000..c77d1e3
Binary files /dev/null and b/icons/darkredNG/skinIcons/recordingdatetime.png differ
diff --git a/icons/darkredNG/skinIcons/rew.png b/icons/darkredNG/skinIcons/rew.png
new file mode 100644
index 0000000..134da85
Binary files /dev/null and b/icons/darkredNG/skinIcons/rew.png differ
diff --git a/icons/darkredNG/skinIcons/rewInactive.png b/icons/darkredNG/skinIcons/rewInactive.png
new file mode 100644
index 0000000..ce18386
Binary files /dev/null and b/icons/darkredNG/skinIcons/rewInactive.png differ
diff --git a/icons/darkredNG/skinIcons/rewx1.png b/icons/darkredNG/skinIcons/rewx1.png
new file mode 100644
index 0000000..ffb79b1
Binary files /dev/null and b/icons/darkredNG/skinIcons/rewx1.png differ
diff --git a/icons/darkredNG/skinIcons/rewx2.png b/icons/darkredNG/skinIcons/rewx2.png
new file mode 100644
index 0000000..00bbedd
Binary files /dev/null and b/icons/darkredNG/skinIcons/rewx2.png differ
diff --git a/icons/darkredNG/skinIcons/rewx3.png b/icons/darkredNG/skinIcons/rewx3.png
new file mode 100644
index 0000000..b683ed3
Binary files /dev/null and b/icons/darkredNG/skinIcons/rewx3.png differ
diff --git a/icons/darkredNG/skinIcons/sd576i.png b/icons/darkredNG/skinIcons/sd576i.png
new file mode 100644
index 0000000..2e313aa
Binary files /dev/null and b/icons/darkredNG/skinIcons/sd576i.png differ
diff --git a/icons/darkredNG/skinIcons/sd576i_rec.png b/icons/darkredNG/skinIcons/sd576i_rec.png
new file mode 100644
index 0000000..2e313aa
Binary files /dev/null and b/icons/darkredNG/skinIcons/sd576i_rec.png differ
diff --git a/icons/darkredNG/skinIcons/stereo.png b/icons/darkredNG/skinIcons/stereo.png
new file mode 100644
index 0000000..7f3610d
Binary files /dev/null and b/icons/darkredNG/skinIcons/stereo.png differ
diff --git a/icons/darkredNG/skinIcons/stereooff.png b/icons/darkredNG/skinIcons/stereooff.png
new file mode 100644
index 0000000..abb2c80
Binary files /dev/null and b/icons/darkredNG/skinIcons/stereooff.png differ
diff --git a/icons/darkredNG/skinIcons/stereoon.png b/icons/darkredNG/skinIcons/stereoon.png
new file mode 100644
index 0000000..21c1b60
Binary files /dev/null and b/icons/darkredNG/skinIcons/stereoon.png differ
diff --git a/icons/darkredNG/skinIcons/timerActive.png b/icons/darkredNG/skinIcons/timerActive.png
new file mode 100644
index 0000000..28c2f81
Binary files /dev/null and b/icons/darkredNG/skinIcons/timerActive.png differ
diff --git a/icons/darkredNG/skinIcons/timerInactive.png b/icons/darkredNG/skinIcons/timerInactive.png
new file mode 100644
index 0000000..c4b1860
Binary files /dev/null and b/icons/darkredNG/skinIcons/timerInactive.png differ
diff --git a/icons/darkredNG/skinIcons/timerRecording.png b/icons/darkredNG/skinIcons/timerRecording.png
new file mode 100644
index 0000000..86dc66b
Binary files /dev/null and b/icons/darkredNG/skinIcons/timerRecording.png differ
diff --git a/icons/darkredNG/skinIcons/tracks.png b/icons/darkredNG/skinIcons/tracks.png
new file mode 100644
index 0000000..1e2547b
Binary files /dev/null and b/icons/darkredNG/skinIcons/tracks.png differ
diff --git a/icons/darkredNG/skinIcons/txtoff.png b/icons/darkredNG/skinIcons/txtoff.png
new file mode 100644
index 0000000..e928a56
Binary files /dev/null and b/icons/darkredNG/skinIcons/txtoff.png differ
diff --git a/icons/darkredNG/skinIcons/txton.png b/icons/darkredNG/skinIcons/txton.png
new file mode 100644
index 0000000..0361835
Binary files /dev/null and b/icons/darkredNG/skinIcons/txton.png differ
diff --git a/icons/darkredNG/skinIcons/vdrlogo.png b/icons/darkredNG/skinIcons/vdrlogo.png
new file mode 100644
index 0000000..e168af6
Binary files /dev/null and b/icons/darkredNG/skinIcons/vdrlogo.png differ
diff --git a/icons/default/extraIcons/Applikationen.png b/icons/default/extraIcons/Applikationen.png
new file mode 100644
index 0000000..3c3b616
Binary files /dev/null and b/icons/default/extraIcons/Applikationen.png differ
diff --git a/icons/default/extraIcons/Audio.png b/icons/default/extraIcons/Audio.png
new file mode 100644
index 0000000..ff387fe
Binary files /dev/null and b/icons/default/extraIcons/Audio.png differ
diff --git a/icons/default/extraIcons/Aufnahmen-Liste aktualisieren.png b/icons/default/extraIcons/Aufnahmen-Liste aktualisieren.png
new file mode 100644
index 0000000..3cdddc9
Binary files /dev/null and b/icons/default/extraIcons/Aufnahmen-Liste aktualisieren.png differ
diff --git a/icons/default/extraIcons/Dienstprogramme.png b/icons/default/extraIcons/Dienstprogramme.png
new file mode 100644
index 0000000..793aba6
Binary files /dev/null and b/icons/default/extraIcons/Dienstprogramme.png differ
diff --git a/icons/default/extraIcons/FireFox.png b/icons/default/extraIcons/FireFox.png
new file mode 100644
index 0000000..192fadc
Binary files /dev/null and b/icons/default/extraIcons/FireFox.png differ
diff --git a/icons/default/extraIcons/Info.png b/icons/default/extraIcons/Info.png
new file mode 100644
index 0000000..6737431
Binary files /dev/null and b/icons/default/extraIcons/Info.png differ
diff --git a/icons/default/extraIcons/Internet.png b/icons/default/extraIcons/Internet.png
new file mode 100644
index 0000000..f3db150
Binary files /dev/null and b/icons/default/extraIcons/Internet.png differ
diff --git a/icons/default/extraIcons/Medien.png b/icons/default/extraIcons/Medien.png
new file mode 100644
index 0000000..0ce2360
Binary files /dev/null and b/icons/default/extraIcons/Medien.png differ
diff --git a/icons/default/extraIcons/Rechner neu starten.png b/icons/default/extraIcons/Rechner neu starten.png
new file mode 100644
index 0000000..5783ccf
Binary files /dev/null and b/icons/default/extraIcons/Rechner neu starten.png differ
diff --git a/icons/default/extraIcons/Remote wakeup.png b/icons/default/extraIcons/Remote wakeup.png
new file mode 100644
index 0000000..1cd2f6e
Binary files /dev/null and b/icons/default/extraIcons/Remote wakeup.png differ
diff --git a/icons/default/extraIcons/Spiele.png b/icons/default/extraIcons/Spiele.png
new file mode 100644
index 0000000..8e07161
Binary files /dev/null and b/icons/default/extraIcons/Spiele.png differ
diff --git a/icons/default/extraIcons/System herunterfahren.png b/icons/default/extraIcons/System herunterfahren.png
new file mode 100644
index 0000000..e0234df
Binary files /dev/null and b/icons/default/extraIcons/System herunterfahren.png differ
diff --git a/icons/default/extraIcons/System.png b/icons/default/extraIcons/System.png
new file mode 100644
index 0000000..81d100e
Binary files /dev/null and b/icons/default/extraIcons/System.png differ
diff --git a/icons/default/extraIcons/Tools.png b/icons/default/extraIcons/Tools.png
new file mode 100644
index 0000000..cf328ef
Binary files /dev/null and b/icons/default/extraIcons/Tools.png differ
diff --git a/icons/default/extraIcons/Tunderbird.png b/icons/default/extraIcons/Tunderbird.png
new file mode 100644
index 0000000..5ae27e0
Binary files /dev/null and b/icons/default/extraIcons/Tunderbird.png differ
diff --git a/icons/default/extraIcons/USB Massenspeicher sicher entfernen.png b/icons/default/extraIcons/USB Massenspeicher sicher entfernen.png
new file mode 100644
index 0000000..cd7b81c
Binary files /dev/null and b/icons/default/extraIcons/USB Massenspeicher sicher entfernen.png differ
diff --git a/icons/default/extraIcons/VDR neu starten.png b/icons/default/extraIcons/VDR neu starten.png
new file mode 100644
index 0000000..14904ca
Binary files /dev/null and b/icons/default/extraIcons/VDR neu starten.png differ
diff --git a/icons/default/extraIcons/Video.png b/icons/default/extraIcons/Video.png
new file mode 100644
index 0000000..490ca4b
Binary files /dev/null and b/icons/default/extraIcons/Video.png differ
diff --git a/icons/default/extraIcons/Web.png b/icons/default/extraIcons/Web.png
new file mode 100644
index 0000000..20260e3
Binary files /dev/null and b/icons/default/extraIcons/Web.png differ
diff --git a/icons/default/extraIcons/XBMC.png b/icons/default/extraIcons/XBMC.png
new file mode 100644
index 0000000..c7c4c04
Binary files /dev/null and b/icons/default/extraIcons/XBMC.png differ
diff --git a/icons/default/extraIcons/Xterm.png b/icons/default/extraIcons/Xterm.png
new file mode 100644
index 0000000..fa75282
Binary files /dev/null and b/icons/default/extraIcons/Xterm.png differ
diff --git a/icons/default/extraIcons/audiovideo.png b/icons/default/extraIcons/audiovideo.png
new file mode 100644
index 0000000..726538d
Binary files /dev/null and b/icons/default/extraIcons/audiovideo.png differ
diff --git a/icons/default/extraIcons/markad_status.png b/icons/default/extraIcons/markad_status.png
new file mode 100644
index 0000000..4fdc7a4
Binary files /dev/null and b/icons/default/extraIcons/markad_status.png differ
diff --git a/icons/default/extraIcons/schneiden_abbrechen.png b/icons/default/extraIcons/schneiden_abbrechen.png
new file mode 100644
index 0000000..b2e0bd3
Binary files /dev/null and b/icons/default/extraIcons/schneiden_abbrechen.png differ
diff --git a/icons/default/extraIcons/tux.png b/icons/default/extraIcons/tux.png
new file mode 100644
index 0000000..c5b4742
Binary files /dev/null and b/icons/default/extraIcons/tux.png differ
diff --git a/icons/default/extraIcons/usb.png b/icons/default/extraIcons/usb.png
new file mode 100644
index 0000000..c4db1d4
Binary files /dev/null and b/icons/default/extraIcons/usb.png differ
diff --git a/icons/default/extraIcons/vdrlogo.png b/icons/default/extraIcons/vdrlogo.png
new file mode 100644
index 0000000..037a191
Binary files /dev/null and b/icons/default/extraIcons/vdrlogo.png differ
diff --git a/icons/default/extraIcons/yaicon_blue.png b/icons/default/extraIcons/yaicon_blue.png
new file mode 100644
index 0000000..2c49273
Binary files /dev/null and b/icons/default/extraIcons/yaicon_blue.png differ
diff --git a/icons/default/menuIcons/CAM.png b/icons/default/menuIcons/CAM.png
new file mode 100644
index 0000000..a394877
Binary files /dev/null and b/icons/default/menuIcons/CAM.png differ
diff --git a/icons/default/menuIcons/Channels.png b/icons/default/menuIcons/Channels.png
index faf8126..ba2ba78 100644
Binary files a/icons/default/menuIcons/Channels.png and b/icons/default/menuIcons/Channels.png differ
diff --git a/icons/default/menuIcons/Commands.png b/icons/default/menuIcons/Commands.png
index bebbe49..c6a83ef 100644
Binary files a/icons/default/menuIcons/Commands.png and b/icons/default/menuIcons/Commands.png differ
diff --git a/icons/default/menuIcons/DVB.png b/icons/default/menuIcons/DVB.png
new file mode 100644
index 0000000..3789145
Binary files /dev/null and b/icons/default/menuIcons/DVB.png differ
diff --git a/icons/default/menuIcons/EPG.png b/icons/default/menuIcons/EPG.png
new file mode 100644
index 0000000..e868b90
Binary files /dev/null and b/icons/default/menuIcons/EPG.png differ
diff --git a/icons/default/menuIcons/LNB.png b/icons/default/menuIcons/LNB.png
new file mode 100644
index 0000000..896dd99
Binary files /dev/null and b/icons/default/menuIcons/LNB.png differ
diff --git a/icons/default/menuIcons/Miscellaneous.png b/icons/default/menuIcons/Miscellaneous.png
new file mode 100644
index 0000000..2a41c4d
Binary files /dev/null and b/icons/default/menuIcons/Miscellaneous.png differ
diff --git a/icons/default/menuIcons/OSD.png b/icons/default/menuIcons/OSD.png
new file mode 100644
index 0000000..8f571c6
Binary files /dev/null and b/icons/default/menuIcons/OSD.png differ
diff --git a/icons/default/menuIcons/Plugins.png b/icons/default/menuIcons/Plugins.png
new file mode 100644
index 0000000..3fcba70
Binary files /dev/null and b/icons/default/menuIcons/Plugins.png differ
diff --git a/icons/default/menuIcons/Recording.png b/icons/default/menuIcons/Recording.png
new file mode 100644
index 0000000..741b1af
Binary files /dev/null and b/icons/default/menuIcons/Recording.png differ
diff --git a/icons/default/menuIcons/Recordings.png b/icons/default/menuIcons/Recordings.png
index 9d23ff4..79aeeb7 100644
Binary files a/icons/default/menuIcons/Recordings.png and b/icons/default/menuIcons/Recordings.png differ
diff --git a/icons/default/menuIcons/Replay.png b/icons/default/menuIcons/Replay.png
new file mode 100644
index 0000000..621596c
Binary files /dev/null and b/icons/default/menuIcons/Replay.png differ
diff --git a/icons/default/menuIcons/Restart.png b/icons/default/menuIcons/Restart.png
new file mode 100644
index 0000000..aa23cd4
Binary files /dev/null and b/icons/default/menuIcons/Restart.png differ
diff --git a/icons/default/menuIcons/Schedule.png b/icons/default/menuIcons/Schedule.png
index 396bb74..3a98cac 100644
Binary files a/icons/default/menuIcons/Schedule.png and b/icons/default/menuIcons/Schedule.png differ
diff --git a/icons/default/menuIcons/Setup.png b/icons/default/menuIcons/Setup.png
index 0746ae7..d121148 100644
Binary files a/icons/default/menuIcons/Setup.png and b/icons/default/menuIcons/Setup.png differ
diff --git a/icons/default/menuIcons/StopRecording.png b/icons/default/menuIcons/StopRecording.png
new file mode 100644
index 0000000..ed83fbb
Binary files /dev/null and b/icons/default/menuIcons/StopRecording.png differ
diff --git a/icons/default/menuIcons/StopReplay.png b/icons/default/menuIcons/StopReplay.png
new file mode 100644
index 0000000..9192760
Binary files /dev/null and b/icons/default/menuIcons/StopReplay.png differ
diff --git a/icons/default/menuIcons/Timers.png b/icons/default/menuIcons/Timers.png
index 1d43872..b866c36 100644
Binary files a/icons/default/menuIcons/Timers.png and b/icons/default/menuIcons/Timers.png differ
diff --git a/icons/default/pluginIcons/admin.png b/icons/default/pluginIcons/admin.png
index 17f3758..cf328ef 100644
Binary files a/icons/default/pluginIcons/admin.png and b/icons/default/pluginIcons/admin.png differ
diff --git a/icons/default/pluginIcons/arghdirector.png b/icons/default/pluginIcons/arghdirector.png
new file mode 100644
index 0000000..bbd221a
Binary files /dev/null and b/icons/default/pluginIcons/arghdirector.png differ
diff --git a/icons/default/pluginIcons/autostart.png b/icons/default/pluginIcons/autostart.png
new file mode 100644
index 0000000..6fdb1bb
Binary files /dev/null and b/icons/default/pluginIcons/autostart.png differ
diff --git a/icons/default/pluginIcons/avahi4vdr.png b/icons/default/pluginIcons/avahi4vdr.png
new file mode 100644
index 0000000..044e71d
Binary files /dev/null and b/icons/default/pluginIcons/avahi4vdr.png differ
diff --git a/icons/default/pluginIcons/avards.png b/icons/default/pluginIcons/avards.png
new file mode 100644
index 0000000..cf8d037
Binary files /dev/null and b/icons/default/pluginIcons/avards.png differ
diff --git a/icons/default/pluginIcons/block.png b/icons/default/pluginIcons/block.png
new file mode 100644
index 0000000..86127c2
Binary files /dev/null and b/icons/default/pluginIcons/block.png differ
diff --git a/icons/default/pluginIcons/burn.png b/icons/default/pluginIcons/burn.png
new file mode 100644
index 0000000..305d7ff
Binary files /dev/null and b/icons/default/pluginIcons/burn.png differ
diff --git a/icons/default/pluginIcons/cdplayer.png b/icons/default/pluginIcons/cdplayer.png
new file mode 100644
index 0000000..89a6c19
Binary files /dev/null and b/icons/default/pluginIcons/cdplayer.png differ
diff --git a/icons/default/pluginIcons/chanman.png b/icons/default/pluginIcons/chanman.png
new file mode 100644
index 0000000..a73e83c
Binary files /dev/null and b/icons/default/pluginIcons/chanman.png differ
diff --git a/icons/default/pluginIcons/check.png b/icons/default/pluginIcons/check.png
new file mode 100644
index 0000000..d487a24
Binary files /dev/null and b/icons/default/pluginIcons/check.png differ
diff --git a/icons/default/pluginIcons/conflictcheckonly.png b/icons/default/pluginIcons/conflictcheckonly.png
new file mode 100644
index 0000000..7f832bd
Binary files /dev/null and b/icons/default/pluginIcons/conflictcheckonly.png differ
diff --git a/icons/default/pluginIcons/ddci.png b/icons/default/pluginIcons/ddci.png
new file mode 100644
index 0000000..4ad459c
Binary files /dev/null and b/icons/default/pluginIcons/ddci.png differ
diff --git a/icons/default/pluginIcons/devstatus.png b/icons/default/pluginIcons/devstatus.png
new file mode 100644
index 0000000..96c0ec1
Binary files /dev/null and b/icons/default/pluginIcons/devstatus.png differ
diff --git a/icons/default/pluginIcons/dummydevice.png b/icons/default/pluginIcons/dummydevice.png
new file mode 100644
index 0000000..11fd707
Binary files /dev/null and b/icons/default/pluginIcons/dummydevice.png differ
diff --git a/icons/default/pluginIcons/duplicates.png b/icons/default/pluginIcons/duplicates.png
new file mode 100644
index 0000000..dc1be57
Binary files /dev/null and b/icons/default/pluginIcons/duplicates.png differ
diff --git a/icons/default/pluginIcons/dvbapi.png b/icons/default/pluginIcons/dvbapi.png
new file mode 100644
index 0000000..b966461
Binary files /dev/null and b/icons/default/pluginIcons/dvbapi.png differ
diff --git a/icons/default/pluginIcons/dvbhddevice.png b/icons/default/pluginIcons/dvbhddevice.png
new file mode 100644
index 0000000..b874297
Binary files /dev/null and b/icons/default/pluginIcons/dvbhddevice.png differ
diff --git a/icons/default/pluginIcons/dvbsddevice.png b/icons/default/pluginIcons/dvbsddevice.png
new file mode 100644
index 0000000..106184e
Binary files /dev/null and b/icons/default/pluginIcons/dvbsddevice.png differ
diff --git a/icons/default/pluginIcons/dynamite.png b/icons/default/pluginIcons/dynamite.png
new file mode 100644
index 0000000..28ea35a
Binary files /dev/null and b/icons/default/pluginIcons/dynamite.png differ
diff --git a/icons/default/pluginIcons/eepg.png b/icons/default/pluginIcons/eepg.png
new file mode 100644
index 0000000..3938b96
Binary files /dev/null and b/icons/default/pluginIcons/eepg.png differ
diff --git a/icons/default/pluginIcons/epg2vdr.png b/icons/default/pluginIcons/epg2vdr.png
new file mode 100644
index 0000000..ac8757e
Binary files /dev/null and b/icons/default/pluginIcons/epg2vdr.png differ
diff --git a/icons/default/pluginIcons/epgsearch.png b/icons/default/pluginIcons/epgsearch.png
new file mode 100644
index 0000000..5eab415
Binary files /dev/null and b/icons/default/pluginIcons/epgsearch.png differ
diff --git a/icons/default/pluginIcons/epgsearchonly.png b/icons/default/pluginIcons/epgsearchonly.png
new file mode 100644
index 0000000..b5186e7
Binary files /dev/null and b/icons/default/pluginIcons/epgsearchonly.png differ
diff --git a/icons/default/pluginIcons/epgsync.png b/icons/default/pluginIcons/epgsync.png
new file mode 100644
index 0000000..5c14009
Binary files /dev/null and b/icons/default/pluginIcons/epgsync.png differ
diff --git a/icons/default/pluginIcons/externalplayer.png b/icons/default/pluginIcons/externalplayer.png
new file mode 100644
index 0000000..2bd67db
Binary files /dev/null and b/icons/default/pluginIcons/externalplayer.png differ
diff --git a/icons/default/pluginIcons/extrecmenu.png b/icons/default/pluginIcons/extrecmenu.png
new file mode 100644
index 0000000..6f613f1
Binary files /dev/null and b/icons/default/pluginIcons/extrecmenu.png differ
diff --git a/icons/default/pluginIcons/favorites.png b/icons/default/pluginIcons/favorites.png
new file mode 100644
index 0000000..409c852
Binary files /dev/null and b/icons/default/pluginIcons/favorites.png differ
diff --git a/icons/default/pluginIcons/femon.png b/icons/default/pluginIcons/femon.png
new file mode 100644
index 0000000..e87b711
Binary files /dev/null and b/icons/default/pluginIcons/femon.png differ
diff --git a/icons/default/pluginIcons/fepg.png b/icons/default/pluginIcons/fepg.png
new file mode 100644
index 0000000..65023ed
Binary files /dev/null and b/icons/default/pluginIcons/fepg.png differ
diff --git a/icons/default/pluginIcons/filebrowser.png b/icons/default/pluginIcons/filebrowser.png
new file mode 100644
index 0000000..d3f90e0
Binary files /dev/null and b/icons/default/pluginIcons/filebrowser.png differ
diff --git a/icons/default/pluginIcons/fritzbox.png b/icons/default/pluginIcons/fritzbox.png
new file mode 100644
index 0000000..7bfc229
Binary files /dev/null and b/icons/default/pluginIcons/fritzbox.png differ
diff --git a/icons/default/pluginIcons/graphlcd.png b/icons/default/pluginIcons/graphlcd.png
new file mode 100644
index 0000000..39ffd35
Binary files /dev/null and b/icons/default/pluginIcons/graphlcd.png differ
diff --git a/icons/default/pluginIcons/graphtft.png b/icons/default/pluginIcons/graphtft.png
new file mode 100644
index 0000000..39ffd35
Binary files /dev/null and b/icons/default/pluginIcons/graphtft.png differ
diff --git a/icons/default/pluginIcons/image.png b/icons/default/pluginIcons/image.png
new file mode 100644
index 0000000..33644e0
Binary files /dev/null and b/icons/default/pluginIcons/image.png differ
diff --git a/icons/default/pluginIcons/imonlcd.png b/icons/default/pluginIcons/imonlcd.png
new file mode 100644
index 0000000..3d34fc4
Binary files /dev/null and b/icons/default/pluginIcons/imonlcd.png differ
diff --git a/icons/default/pluginIcons/iptv.png b/icons/default/pluginIcons/iptv.png
new file mode 100644
index 0000000..4494ddc
Binary files /dev/null and b/icons/default/pluginIcons/iptv.png differ
diff --git a/icons/default/pluginIcons/lcdproc.png b/icons/default/pluginIcons/lcdproc.png
new file mode 100644
index 0000000..3d34fc4
Binary files /dev/null and b/icons/default/pluginIcons/lcdproc.png differ
diff --git a/icons/default/pluginIcons/mailbox.png b/icons/default/pluginIcons/mailbox.png
new file mode 100644
index 0000000..1bc76e8
Binary files /dev/null and b/icons/default/pluginIcons/mailbox.png differ
diff --git a/icons/default/pluginIcons/makemkv.png b/icons/default/pluginIcons/makemkv.png
new file mode 100644
index 0000000..41cddf1
Binary files /dev/null and b/icons/default/pluginIcons/makemkv.png differ
diff --git a/icons/default/pluginIcons/markad.png b/icons/default/pluginIcons/markad.png
new file mode 100644
index 0000000..b3defaf
Binary files /dev/null and b/icons/default/pluginIcons/markad.png differ
diff --git a/icons/default/pluginIcons/mlist.png b/icons/default/pluginIcons/mlist.png
new file mode 100644
index 0000000..19c367f
Binary files /dev/null and b/icons/default/pluginIcons/mlist.png differ
diff --git a/icons/default/pluginIcons/music.png b/icons/default/pluginIcons/music.png
new file mode 100644
index 0000000..abb012e
Binary files /dev/null and b/icons/default/pluginIcons/music.png differ
diff --git a/icons/default/pluginIcons/noepg.png b/icons/default/pluginIcons/noepg.png
new file mode 100644
index 0000000..eb9410d
Binary files /dev/null and b/icons/default/pluginIcons/noepg.png differ
diff --git a/icons/default/pluginIcons/nordlichtsepg.png b/icons/default/pluginIcons/nordlichtsepg.png
new file mode 100644
index 0000000..3ee3fa2
Binary files /dev/null and b/icons/default/pluginIcons/nordlichtsepg.png differ
diff --git a/icons/default/pluginIcons/osdteletext.png b/icons/default/pluginIcons/osdteletext.png
index 0419706..664e770 100644
Binary files a/icons/default/pluginIcons/osdteletext.png and b/icons/default/pluginIcons/osdteletext.png differ
diff --git a/icons/default/pluginIcons/peer.png b/icons/default/pluginIcons/peer.png
new file mode 100644
index 0000000..998d568
Binary files /dev/null and b/icons/default/pluginIcons/peer.png differ
diff --git a/icons/default/pluginIcons/play.png b/icons/default/pluginIcons/play.png
new file mode 100644
index 0000000..2848fc6
Binary files /dev/null and b/icons/default/pluginIcons/play.png differ
diff --git a/icons/default/pluginIcons/pvrinput.png b/icons/default/pluginIcons/pvrinput.png
new file mode 100644
index 0000000..724f698
Binary files /dev/null and b/icons/default/pluginIcons/pvrinput.png differ
diff --git a/icons/default/pluginIcons/quickepgsearch.png b/icons/default/pluginIcons/quickepgsearch.png
new file mode 100644
index 0000000..76a31f4
Binary files /dev/null and b/icons/default/pluginIcons/quickepgsearch.png differ
diff --git a/icons/default/pluginIcons/radio.png b/icons/default/pluginIcons/radio.png
new file mode 100644
index 0000000..193b7d4
Binary files /dev/null and b/icons/default/pluginIcons/radio.png differ
diff --git a/icons/default/pluginIcons/remote.png b/icons/default/pluginIcons/remote.png
new file mode 100644
index 0000000..7f46b1b
Binary files /dev/null and b/icons/default/pluginIcons/remote.png differ
diff --git a/icons/default/pluginIcons/remotetimers.png b/icons/default/pluginIcons/remotetimers.png
new file mode 100644
index 0000000..fae3b79
Binary files /dev/null and b/icons/default/pluginIcons/remotetimers.png differ
diff --git a/icons/default/pluginIcons/rssreader.png b/icons/default/pluginIcons/rssreader.png
new file mode 100644
index 0000000..db538f0
Binary files /dev/null and b/icons/default/pluginIcons/rssreader.png differ
diff --git a/icons/default/pluginIcons/sc.png b/icons/default/pluginIcons/sc.png
new file mode 100644
index 0000000..2472d6c
Binary files /dev/null and b/icons/default/pluginIcons/sc.png differ
diff --git a/icons/default/pluginIcons/screenshot.png b/icons/default/pluginIcons/screenshot.png
new file mode 100644
index 0000000..be9b4d5
Binary files /dev/null and b/icons/default/pluginIcons/screenshot.png differ
diff --git a/icons/default/pluginIcons/seduatmo.png b/icons/default/pluginIcons/seduatmo.png
new file mode 100644
index 0000000..4b5292f
Binary files /dev/null and b/icons/default/pluginIcons/seduatmo.png differ
diff --git a/icons/default/pluginIcons/skyselectfeeds.png b/icons/default/pluginIcons/skyselectfeeds.png
new file mode 100644
index 0000000..d81a024
Binary files /dev/null and b/icons/default/pluginIcons/skyselectfeeds.png differ
diff --git a/icons/default/pluginIcons/sleeptimer.png b/icons/default/pluginIcons/sleeptimer.png
new file mode 100644
index 0000000..cd4956f
Binary files /dev/null and b/icons/default/pluginIcons/sleeptimer.png differ
diff --git a/icons/default/pluginIcons/softhddevice.png b/icons/default/pluginIcons/softhddevice.png
new file mode 100644
index 0000000..df13f2c
Binary files /dev/null and b/icons/default/pluginIcons/softhddevice.png differ
diff --git a/icons/default/pluginIcons/streamdev-server.png b/icons/default/pluginIcons/streamdev-server.png
new file mode 100644
index 0000000..e89ed8b
Binary files /dev/null and b/icons/default/pluginIcons/streamdev-server.png differ
diff --git a/icons/default/pluginIcons/systeminfo.png b/icons/default/pluginIcons/systeminfo.png
new file mode 100644
index 0000000..b14763f
Binary files /dev/null and b/icons/default/pluginIcons/systeminfo.png differ
diff --git a/icons/default/pluginIcons/targavfd.png b/icons/default/pluginIcons/targavfd.png
new file mode 100644
index 0000000..e91b111
Binary files /dev/null and b/icons/default/pluginIcons/targavfd.png differ
diff --git a/icons/default/pluginIcons/trayopenng.png b/icons/default/pluginIcons/trayopenng.png
new file mode 100644
index 0000000..6ebd17d
Binary files /dev/null and b/icons/default/pluginIcons/trayopenng.png differ
diff --git a/icons/default/pluginIcons/tvguide.png b/icons/default/pluginIcons/tvguide.png
index 6c756b2..968a37c 100644
Binary files a/icons/default/pluginIcons/tvguide.png and b/icons/default/pluginIcons/tvguide.png differ
diff --git a/icons/default/pluginIcons/tvm2vdr.png b/icons/default/pluginIcons/tvm2vdr.png
new file mode 100644
index 0000000..47f9a91
Binary files /dev/null and b/icons/default/pluginIcons/tvm2vdr.png differ
diff --git a/icons/default/pluginIcons/tvscraper.png b/icons/default/pluginIcons/tvscraper.png
new file mode 100644
index 0000000..a106cb5
Binary files /dev/null and b/icons/default/pluginIcons/tvscraper.png differ
diff --git a/icons/default/pluginIcons/undelete.png b/icons/default/pluginIcons/undelete.png
new file mode 100644
index 0000000..a53d50a
Binary files /dev/null and b/icons/default/pluginIcons/undelete.png differ
diff --git a/icons/default/pluginIcons/weatherng.png b/icons/default/pluginIcons/weatherng.png
new file mode 100644
index 0000000..a88f11d
Binary files /dev/null and b/icons/default/pluginIcons/weatherng.png differ
diff --git a/icons/default/pluginIcons/xmltv2vdr.png b/icons/default/pluginIcons/xmltv2vdr.png
new file mode 100644
index 0000000..ea73c74
Binary files /dev/null and b/icons/default/pluginIcons/xmltv2vdr.png differ
diff --git a/icons/default/pluginIcons/yaepghg.png b/icons/default/pluginIcons/yaepghg.png
new file mode 100644
index 0000000..53ce443
Binary files /dev/null and b/icons/default/pluginIcons/yaepghg.png differ
diff --git a/icons/default/skinElements/buttonblue.png b/icons/default/skinElements/buttonblue.png
new file mode 100644
index 0000000..d00e4d2
Binary files /dev/null and b/icons/default/skinElements/buttonblue.png differ
diff --git a/icons/default/skinElements/buttongreen.png b/icons/default/skinElements/buttongreen.png
new file mode 100644
index 0000000..8c05c08
Binary files /dev/null and b/icons/default/skinElements/buttongreen.png differ
diff --git a/icons/default/skinElements/buttonred.png b/icons/default/skinElements/buttonred.png
new file mode 100644
index 0000000..9367c9b
Binary files /dev/null and b/icons/default/skinElements/buttonred.png differ
diff --git a/icons/default/skinElements/buttonyellow.png b/icons/default/skinElements/buttonyellow.png
new file mode 100644
index 0000000..aff8758
Binary files /dev/null and b/icons/default/skinElements/buttonyellow.png differ
diff --git a/icons/default/skinElements/channellogoback.png b/icons/default/skinElements/channellogoback.png
new file mode 100644
index 0000000..b0e83b1
Binary files /dev/null and b/icons/default/skinElements/channellogoback.png differ
diff --git a/icons/default/skinElements/displaychannelback.png b/icons/default/skinElements/displaychannelback.png
new file mode 100644
index 0000000..1437384
Binary files /dev/null and b/icons/default/skinElements/displaychannelback.png differ
diff --git a/icons/default/skinElements/displaychannelback_right.png b/icons/default/skinElements/displaychannelback_right.png
new file mode 100644
index 0000000..98114bd
Binary files /dev/null and b/icons/default/skinElements/displaychannelback_right.png differ
diff --git a/icons/default/skinElements/displaychanneltop.png b/icons/default/skinElements/displaychanneltop.png
new file mode 100644
index 0000000..5108435
Binary files /dev/null and b/icons/default/skinElements/displaychanneltop.png differ
diff --git a/icons/default/skinElements/displaychanneltop_right.png b/icons/default/skinElements/displaychanneltop_right.png
new file mode 100644
index 0000000..ede398d
Binary files /dev/null and b/icons/default/skinElements/displaychanneltop_right.png differ
diff --git a/icons/default/skinElements/displayreplayback.png b/icons/default/skinElements/displayreplayback.png
new file mode 100644
index 0000000..d72931f
Binary files /dev/null and b/icons/default/skinElements/displayreplayback.png differ
diff --git a/icons/default/skinElements/displayreplaytop.png b/icons/default/skinElements/displayreplaytop.png
new file mode 100644
index 0000000..064347e
Binary files /dev/null and b/icons/default/skinElements/displayreplaytop.png differ
diff --git a/icons/default/skinElements/displayvolume.png b/icons/default/skinElements/displayvolume.png
new file mode 100644
index 0000000..a5c4c66
Binary files /dev/null and b/icons/default/skinElements/displayvolume.png differ
diff --git a/icons/default/skinElements/header_mirroredtop.png b/icons/default/skinElements/header_mirroredtop.png
new file mode 100644
index 0000000..6475b7a
Binary files /dev/null and b/icons/default/skinElements/header_mirroredtop.png differ
diff --git a/icons/default/skinElements/headertop.png b/icons/default/skinElements/headertop.png
new file mode 100644
index 0000000..2bc19a6
Binary files /dev/null and b/icons/default/skinElements/headertop.png differ
diff --git a/icons/default/skinElements/menubutton.png b/icons/default/skinElements/menubutton.png
new file mode 100644
index 0000000..0800a5e
Binary files /dev/null and b/icons/default/skinElements/menubutton.png differ
diff --git a/icons/default/skinElements/menubuttonactive.png b/icons/default/skinElements/menubuttonactive.png
new file mode 100644
index 0000000..caae104
Binary files /dev/null and b/icons/default/skinElements/menubuttonactive.png differ
diff --git a/icons/default/skinElements/menubuttondefault.png b/icons/default/skinElements/menubuttondefault.png
new file mode 100644
index 0000000..76735de
Binary files /dev/null and b/icons/default/skinElements/menubuttondefault.png differ
diff --git a/icons/default/skinElements/menubuttondefaultactive.png b/icons/default/skinElements/menubuttondefaultactive.png
new file mode 100644
index 0000000..70c0b8a
Binary files /dev/null and b/icons/default/skinElements/menubuttondefaultactive.png differ
diff --git a/icons/default/skinElements/menubuttontop.png b/icons/default/skinElements/menubuttontop.png
new file mode 100644
index 0000000..1b49cfd
Binary files /dev/null and b/icons/default/skinElements/menubuttontop.png differ
diff --git a/icons/default/skinElements/messageError.png b/icons/default/skinElements/messageError.png
new file mode 100644
index 0000000..a894992
Binary files /dev/null and b/icons/default/skinElements/messageError.png differ
diff --git a/icons/default/skinElements/messageInfo.png b/icons/default/skinElements/messageInfo.png
new file mode 100644
index 0000000..5f8e62a
Binary files /dev/null and b/icons/default/skinElements/messageInfo.png differ
diff --git a/icons/default/skinElements/messageStatus.png b/icons/default/skinElements/messageStatus.png
new file mode 100644
index 0000000..f4b83f4
Binary files /dev/null and b/icons/default/skinElements/messageStatus.png differ
diff --git a/icons/default/skinElements/messageWarning.png b/icons/default/skinElements/messageWarning.png
new file mode 100644
index 0000000..f073ed5
Binary files /dev/null and b/icons/default/skinElements/messageWarning.png differ
diff --git a/icons/default/skinElements/scrollbar.png b/icons/default/skinElements/scrollbar.png
new file mode 100644
index 0000000..f822555
Binary files /dev/null and b/icons/default/skinElements/scrollbar.png differ
diff --git a/icons/default/skinIcons/Channelseparator.png b/icons/default/skinIcons/Channelseparator.png
new file mode 100644
index 0000000..ad92e2a
Binary files /dev/null and b/icons/default/skinIcons/Channelseparator.png differ
diff --git a/icons/default/skinIcons/DiskUsage.png b/icons/default/skinIcons/DiskUsage.png
new file mode 100644
index 0000000..f40fcd9
Binary files /dev/null and b/icons/default/skinIcons/DiskUsage.png differ
diff --git a/icons/default/skinIcons/ac3.png b/icons/default/skinIcons/ac3.png
new file mode 100644
index 0000000..5b8614a
Binary files /dev/null and b/icons/default/skinIcons/ac3.png differ
diff --git a/icons/default/skinIcons/activetimer.png b/icons/default/skinIcons/activetimer.png
new file mode 100644
index 0000000..af4c33c
Binary files /dev/null and b/icons/default/skinIcons/activetimer.png differ
diff --git a/icons/default/skinIcons/activetimersmall.png b/icons/default/skinIcons/activetimersmall.png
new file mode 100644
index 0000000..324ce85
Binary files /dev/null and b/icons/default/skinIcons/activetimersmall.png differ
diff --git a/icons/default/skinIcons/arrowLeftChannelSep.png b/icons/default/skinIcons/arrowLeftChannelSep.png
new file mode 100644
index 0000000..642cd78
Binary files /dev/null and b/icons/default/skinIcons/arrowLeftChannelSep.png differ
diff --git a/icons/default/skinIcons/arrowRightChannelSep.png b/icons/default/skinIcons/arrowRightChannelSep.png
new file mode 100644
index 0000000..1418671
Binary files /dev/null and b/icons/default/skinIcons/arrowRightChannelSep.png differ
diff --git a/icons/default/skinIcons/channeldelimiter.png b/icons/default/skinIcons/channeldelimiter.png
new file mode 100644
index 0000000..5212dae
Binary files /dev/null and b/icons/default/skinIcons/channeldelimiter.png differ
diff --git a/icons/default/skinIcons/crypted.png b/icons/default/skinIcons/crypted.png
new file mode 100644
index 0000000..1aec146
Binary files /dev/null and b/icons/default/skinIcons/crypted.png differ
diff --git a/icons/default/skinIcons/daydelimiter.png b/icons/default/skinIcons/daydelimiter.png
new file mode 100644
index 0000000..7ae6053
Binary files /dev/null and b/icons/default/skinIcons/daydelimiter.png differ
diff --git a/icons/default/skinIcons/defaultPoster.png b/icons/default/skinIcons/defaultPoster.png
new file mode 100644
index 0000000..ba7e4df
Binary files /dev/null and b/icons/default/skinIcons/defaultPoster.png differ
diff --git a/icons/default/skinIcons/discpercent.png b/icons/default/skinIcons/discpercent.png
new file mode 100644
index 0000000..949fbc7
Binary files /dev/null and b/icons/default/skinIcons/discpercent.png differ
diff --git a/icons/default/skinIcons/dolbyoff.png b/icons/default/skinIcons/dolbyoff.png
new file mode 100644
index 0000000..ef4f17c
Binary files /dev/null and b/icons/default/skinIcons/dolbyoff.png differ
diff --git a/icons/default/skinIcons/dolbyon.png b/icons/default/skinIcons/dolbyon.png
new file mode 100644
index 0000000..1278abe
Binary files /dev/null and b/icons/default/skinIcons/dolbyon.png differ
diff --git a/icons/default/skinIcons/encrypted.png b/icons/default/skinIcons/encrypted.png
new file mode 100644
index 0000000..2b6345a
Binary files /dev/null and b/icons/default/skinIcons/encrypted.png differ
diff --git a/icons/default/skinIcons/fta.png b/icons/default/skinIcons/fta.png
new file mode 100644
index 0000000..55e3789
Binary files /dev/null and b/icons/default/skinIcons/fta.png differ
diff --git a/icons/default/skinIcons/fwd.png b/icons/default/skinIcons/fwd.png
new file mode 100644
index 0000000..3dea9d3
Binary files /dev/null and b/icons/default/skinIcons/fwd.png differ
diff --git a/icons/default/skinIcons/fwdInactive.png b/icons/default/skinIcons/fwdInactive.png
new file mode 100644
index 0000000..cb551c2
Binary files /dev/null and b/icons/default/skinIcons/fwdInactive.png differ
diff --git a/icons/default/skinIcons/fwdx1.png b/icons/default/skinIcons/fwdx1.png
new file mode 100644
index 0000000..599256e
Binary files /dev/null and b/icons/default/skinIcons/fwdx1.png differ
diff --git a/icons/default/skinIcons/fwdx2.png b/icons/default/skinIcons/fwdx2.png
new file mode 100644
index 0000000..3eec356
Binary files /dev/null and b/icons/default/skinIcons/fwdx2.png differ
diff --git a/icons/default/skinIcons/fwdx3.png b/icons/default/skinIcons/fwdx3.png
new file mode 100644
index 0000000..f686658
Binary files /dev/null and b/icons/default/skinIcons/fwdx3.png differ
diff --git a/icons/default/skinIcons/hd1080i.png b/icons/default/skinIcons/hd1080i.png
new file mode 100644
index 0000000..1a863a9
Binary files /dev/null and b/icons/default/skinIcons/hd1080i.png differ
diff --git a/icons/default/skinIcons/hd1080i_rec.png b/icons/default/skinIcons/hd1080i_rec.png
new file mode 100644
index 0000000..1a863a9
Binary files /dev/null and b/icons/default/skinIcons/hd1080i_rec.png differ
diff --git a/icons/default/skinIcons/hd720p.png b/icons/default/skinIcons/hd720p.png
new file mode 100644
index 0000000..47317d8
Binary files /dev/null and b/icons/default/skinIcons/hd720p.png differ
diff --git a/icons/default/skinIcons/hd720p_rec.png b/icons/default/skinIcons/hd720p_rec.png
new file mode 100644
index 0000000..47317d8
Binary files /dev/null and b/icons/default/skinIcons/hd720p_rec.png differ
diff --git a/icons/default/skinIcons/newrecording.png b/icons/default/skinIcons/newrecording.png
new file mode 100644
index 0000000..b9166ba
Binary files /dev/null and b/icons/default/skinIcons/newrecording.png differ
diff --git a/icons/default/skinIcons/pause.png b/icons/default/skinIcons/pause.png
new file mode 100644
index 0000000..cd8cad8
Binary files /dev/null and b/icons/default/skinIcons/pause.png differ
diff --git a/icons/default/skinIcons/pauseInactive.png b/icons/default/skinIcons/pauseInactive.png
new file mode 100644
index 0000000..f9a9d94
Binary files /dev/null and b/icons/default/skinIcons/pauseInactive.png differ
diff --git a/icons/default/skinIcons/play.png b/icons/default/skinIcons/play.png
new file mode 100644
index 0000000..4cc0541
Binary files /dev/null and b/icons/default/skinIcons/play.png differ
diff --git a/icons/default/skinIcons/playInactive.png b/icons/default/skinIcons/playInactive.png
new file mode 100644
index 0000000..7fb820a
Binary files /dev/null and b/icons/default/skinIcons/playInactive.png differ
diff --git a/icons/default/skinIcons/radio.png b/icons/default/skinIcons/radio.png
new file mode 100644
index 0000000..19116d8
Binary files /dev/null and b/icons/default/skinIcons/radio.png differ
diff --git a/icons/default/skinIcons/recfolder.png b/icons/default/skinIcons/recfolder.png
new file mode 100644
index 0000000..e3df65b
Binary files /dev/null and b/icons/default/skinIcons/recfolder.png differ
diff --git a/icons/default/skinIcons/recoff.png b/icons/default/skinIcons/recoff.png
new file mode 100644
index 0000000..4f59218
Binary files /dev/null and b/icons/default/skinIcons/recoff.png differ
diff --git a/icons/default/skinIcons/recon.png b/icons/default/skinIcons/recon.png
new file mode 100644
index 0000000..14fe7be
Binary files /dev/null and b/icons/default/skinIcons/recon.png differ
diff --git a/icons/default/skinIcons/recordingcutted.png b/icons/default/skinIcons/recordingcutted.png
new file mode 100644
index 0000000..b90c9c1
Binary files /dev/null and b/icons/default/skinIcons/recordingcutted.png differ
diff --git a/icons/default/skinIcons/recordingdatetime.png b/icons/default/skinIcons/recordingdatetime.png
new file mode 100644
index 0000000..c77d1e3
Binary files /dev/null and b/icons/default/skinIcons/recordingdatetime.png differ
diff --git a/icons/default/skinIcons/rew.png b/icons/default/skinIcons/rew.png
new file mode 100644
index 0000000..72408d0
Binary files /dev/null and b/icons/default/skinIcons/rew.png differ
diff --git a/icons/default/skinIcons/rewInactive.png b/icons/default/skinIcons/rewInactive.png
new file mode 100644
index 0000000..ce18386
Binary files /dev/null and b/icons/default/skinIcons/rewInactive.png differ
diff --git a/icons/default/skinIcons/rewx1.png b/icons/default/skinIcons/rewx1.png
new file mode 100644
index 0000000..333c30d
Binary files /dev/null and b/icons/default/skinIcons/rewx1.png differ
diff --git a/icons/default/skinIcons/rewx2.png b/icons/default/skinIcons/rewx2.png
new file mode 100644
index 0000000..c5d1084
Binary files /dev/null and b/icons/default/skinIcons/rewx2.png differ
diff --git a/icons/default/skinIcons/rewx3.png b/icons/default/skinIcons/rewx3.png
new file mode 100644
index 0000000..6ab7a8d
Binary files /dev/null and b/icons/default/skinIcons/rewx3.png differ
diff --git a/icons/default/skinIcons/sd576i.png b/icons/default/skinIcons/sd576i.png
new file mode 100644
index 0000000..994a7a2
Binary files /dev/null and b/icons/default/skinIcons/sd576i.png differ
diff --git a/icons/default/skinIcons/sd576i_rec.png b/icons/default/skinIcons/sd576i_rec.png
new file mode 100644
index 0000000..994a7a2
Binary files /dev/null and b/icons/default/skinIcons/sd576i_rec.png differ
diff --git a/icons/default/skinIcons/stereo.png b/icons/default/skinIcons/stereo.png
new file mode 100644
index 0000000..7f3610d
Binary files /dev/null and b/icons/default/skinIcons/stereo.png differ
diff --git a/icons/default/skinIcons/stereooff.png b/icons/default/skinIcons/stereooff.png
new file mode 100644
index 0000000..569a342
Binary files /dev/null and b/icons/default/skinIcons/stereooff.png differ
diff --git a/icons/default/skinIcons/stereoon.png b/icons/default/skinIcons/stereoon.png
new file mode 100644
index 0000000..eb838b9
Binary files /dev/null and b/icons/default/skinIcons/stereoon.png differ
diff --git a/icons/default/skinIcons/timerActive.png b/icons/default/skinIcons/timerActive.png
new file mode 100644
index 0000000..28c2f81
Binary files /dev/null and b/icons/default/skinIcons/timerActive.png differ
diff --git a/icons/default/skinIcons/timerInactive.png b/icons/default/skinIcons/timerInactive.png
new file mode 100644
index 0000000..c4b1860
Binary files /dev/null and b/icons/default/skinIcons/timerInactive.png differ
diff --git a/icons/default/skinIcons/timerRecording.png b/icons/default/skinIcons/timerRecording.png
new file mode 100644
index 0000000..86dc66b
Binary files /dev/null and b/icons/default/skinIcons/timerRecording.png differ
diff --git a/icons/default/skinIcons/tracks.png b/icons/default/skinIcons/tracks.png
new file mode 100644
index 0000000..1e2547b
Binary files /dev/null and b/icons/default/skinIcons/tracks.png differ
diff --git a/icons/default/skinIcons/txtoff.png b/icons/default/skinIcons/txtoff.png
new file mode 100644
index 0000000..3b2eac3
Binary files /dev/null and b/icons/default/skinIcons/txtoff.png differ
diff --git a/icons/default/skinIcons/txton.png b/icons/default/skinIcons/txton.png
new file mode 100644
index 0000000..148f9ef
Binary files /dev/null and b/icons/default/skinIcons/txton.png differ
diff --git a/icons/default/skinIcons/vdrlogo.png b/icons/default/skinIcons/vdrlogo.png
index 5574685..e168af6 100644
Binary files a/icons/default/skinIcons/vdrlogo.png and b/icons/default/skinIcons/vdrlogo.png differ
diff --git a/icons/extraIcons/Aufname_aktualisieren.png b/icons/extraIcons/Aufnahmen-Liste aktualisieren.png
similarity index 100%
rename from icons/extraIcons/Aufname_aktualisieren.png
rename to icons/extraIcons/Aufnahmen-Liste aktualisieren.png
diff --git a/icons/extraIcons/Rechner_neu_starten.png b/icons/extraIcons/Rechner neu starten.png
similarity index 100%
rename from icons/extraIcons/Rechner_neu_starten.png
rename to icons/extraIcons/Rechner neu starten.png
diff --git a/icons/extraIcons/usb_entfernen.png b/icons/extraIcons/USB Massenspeicher sicher entfernen.png
similarity index 100%
rename from icons/extraIcons/usb_entfernen.png
rename to icons/extraIcons/USB Massenspeicher sicher entfernen.png
diff --git a/icons/extraIcons/VDR_neu_starten.png b/icons/extraIcons/VDR neu starten.png
similarity index 100%
rename from icons/extraIcons/VDR_neu_starten.png
rename to icons/extraIcons/VDR neu starten.png
diff --git a/icons/extraIcons/xbmc.png b/icons/extraIcons/XBMC.png
similarity index 100%
rename from icons/extraIcons/xbmc.png
rename to icons/extraIcons/XBMC.png
diff --git a/icons/extraIcons/xterm.png b/icons/extraIcons/Xterm.png
similarity index 100%
rename from icons/extraIcons/xterm.png
rename to icons/extraIcons/Xterm.png
diff --git a/icons/extraIcons/AudioVideo.png b/icons/extraIcons/audiovideo.png
similarity index 100%
rename from icons/extraIcons/AudioVideo.png
rename to icons/extraIcons/audiovideo.png
diff --git a/icons/green/menuIcons/Commands.png b/icons/green/menuIcons/Commands.png
index 86bf018..e3e0634 100644
Binary files a/icons/green/menuIcons/Commands.png and b/icons/green/menuIcons/Commands.png differ
diff --git a/icons/green/menuIcons/Setup.png b/icons/green/menuIcons/Setup.png
index 0abeda0..0c7be03 100644
Binary files a/icons/green/menuIcons/Setup.png and b/icons/green/menuIcons/Setup.png differ
diff --git a/icons/green/pluginIcons/admin.png b/icons/green/pluginIcons/admin.png
index 6989268..6c251b0 100644
Binary files a/icons/green/pluginIcons/admin.png and b/icons/green/pluginIcons/admin.png differ
diff --git a/icons/green/skinElements/channellogoback.png b/icons/green/skinElements/channellogoback.png
new file mode 100644
index 0000000..6b8f730
Binary files /dev/null and b/icons/green/skinElements/channellogoback.png differ
diff --git a/icons/green/skinIcons/Channelseparator.png b/icons/green/skinIcons/Channelseparator.png
new file mode 100644
index 0000000..5880e58
Binary files /dev/null and b/icons/green/skinIcons/Channelseparator.png differ
diff --git a/icons/green/skinIcons/DiskUsage.png b/icons/green/skinIcons/DiskUsage.png
index 5120eaf..b68eaff 100644
Binary files a/icons/green/skinIcons/DiskUsage.png and b/icons/green/skinIcons/DiskUsage.png differ
diff --git a/icons/green/skinIcons/arrowLeftChannelSep.png b/icons/green/skinIcons/arrowLeftChannelSep.png
new file mode 100644
index 0000000..9bdcdb4
Binary files /dev/null and b/icons/green/skinIcons/arrowLeftChannelSep.png differ
diff --git a/icons/green/skinIcons/arrowRightChannelSep.png b/icons/green/skinIcons/arrowRightChannelSep.png
new file mode 100644
index 0000000..3c380ba
Binary files /dev/null and b/icons/green/skinIcons/arrowRightChannelSep.png differ
diff --git a/icons/green/skinIcons/daydelimiter.png b/icons/green/skinIcons/daydelimiter.png
index cd17d09..4bdf5ed 100644
Binary files a/icons/green/skinIcons/daydelimiter.png and b/icons/green/skinIcons/daydelimiter.png differ
diff --git a/icons/green/skinIcons/fwd.png b/icons/green/skinIcons/fwd.png
index e54ab87..074c6f9 100644
Binary files a/icons/green/skinIcons/fwd.png and b/icons/green/skinIcons/fwd.png differ
diff --git a/icons/green/skinIcons/fwdx1.png b/icons/green/skinIcons/fwdx1.png
new file mode 100644
index 0000000..7cda81f
Binary files /dev/null and b/icons/green/skinIcons/fwdx1.png differ
diff --git a/icons/green/skinIcons/fwdx2.png b/icons/green/skinIcons/fwdx2.png
new file mode 100644
index 0000000..b978ecb
Binary files /dev/null and b/icons/green/skinIcons/fwdx2.png differ
diff --git a/icons/green/skinIcons/fwdx3.png b/icons/green/skinIcons/fwdx3.png
new file mode 100644
index 0000000..a2e9e58
Binary files /dev/null and b/icons/green/skinIcons/fwdx3.png differ
diff --git a/icons/green/skinIcons/pause.png b/icons/green/skinIcons/pause.png
index a3d7b8a..8c62785 100644
Binary files a/icons/green/skinIcons/pause.png and b/icons/green/skinIcons/pause.png differ
diff --git a/icons/green/skinIcons/play.png b/icons/green/skinIcons/play.png
index fcd91c9..487a33c 100644
Binary files a/icons/green/skinIcons/play.png and b/icons/green/skinIcons/play.png differ
diff --git a/icons/green/skinIcons/rew.png b/icons/green/skinIcons/rew.png
index 1983cfe..22f0f4e 100644
Binary files a/icons/green/skinIcons/rew.png and b/icons/green/skinIcons/rew.png differ
diff --git a/icons/green/skinIcons/rewx1.png b/icons/green/skinIcons/rewx1.png
new file mode 100644
index 0000000..b43191f
Binary files /dev/null and b/icons/green/skinIcons/rewx1.png differ
diff --git a/icons/green/skinIcons/rewx2.png b/icons/green/skinIcons/rewx2.png
new file mode 100644
index 0000000..c5d81fc
Binary files /dev/null and b/icons/green/skinIcons/rewx2.png differ
diff --git a/icons/green/skinIcons/rewx3.png b/icons/green/skinIcons/rewx3.png
new file mode 100644
index 0000000..d2631d5
Binary files /dev/null and b/icons/green/skinIcons/rewx3.png differ
diff --git a/icons/green/skinIcons/tracks.png b/icons/green/skinIcons/tracks.png
index 7565c0d..1768cac 100644
Binary files a/icons/green/skinIcons/tracks.png and b/icons/green/skinIcons/tracks.png differ
diff --git a/icons/green/skinIcons/vdrlogo.png b/icons/green/skinIcons/vdrlogo.png
new file mode 100644
index 0000000..0d8ef13
Binary files /dev/null and b/icons/green/skinIcons/vdrlogo.png differ
diff --git a/icons/iceblue/extraIcons/Applikationen.png b/icons/iceblue/extraIcons/Applikationen.png
new file mode 100644
index 0000000..3c7906f
Binary files /dev/null and b/icons/iceblue/extraIcons/Applikationen.png differ
diff --git a/icons/iceblue/extraIcons/Audio.png b/icons/iceblue/extraIcons/Audio.png
new file mode 100644
index 0000000..98948ef
Binary files /dev/null and b/icons/iceblue/extraIcons/Audio.png differ
diff --git a/icons/iceblue/extraIcons/Aufnahmen-Liste aktualisieren.png b/icons/iceblue/extraIcons/Aufnahmen-Liste aktualisieren.png
new file mode 100644
index 0000000..3c66fb8
Binary files /dev/null and b/icons/iceblue/extraIcons/Aufnahmen-Liste aktualisieren.png differ
diff --git a/icons/iceblue/extraIcons/Dienstprogramme.png b/icons/iceblue/extraIcons/Dienstprogramme.png
new file mode 100644
index 0000000..aa9dd6e
Binary files /dev/null and b/icons/iceblue/extraIcons/Dienstprogramme.png differ
diff --git a/icons/iceblue/extraIcons/FireFox.png b/icons/iceblue/extraIcons/FireFox.png
new file mode 100644
index 0000000..1f2077d
Binary files /dev/null and b/icons/iceblue/extraIcons/FireFox.png differ
diff --git a/icons/iceblue/extraIcons/Info.png b/icons/iceblue/extraIcons/Info.png
new file mode 100644
index 0000000..491fa45
Binary files /dev/null and b/icons/iceblue/extraIcons/Info.png differ
diff --git a/icons/iceblue/extraIcons/Internet.png b/icons/iceblue/extraIcons/Internet.png
new file mode 100644
index 0000000..30574a9
Binary files /dev/null and b/icons/iceblue/extraIcons/Internet.png differ
diff --git a/icons/iceblue/extraIcons/Medien.png b/icons/iceblue/extraIcons/Medien.png
new file mode 100644
index 0000000..c5810bf
Binary files /dev/null and b/icons/iceblue/extraIcons/Medien.png differ
diff --git a/icons/iceblue/extraIcons/Rechner neu starten.png b/icons/iceblue/extraIcons/Rechner neu starten.png
new file mode 100644
index 0000000..fe51064
Binary files /dev/null and b/icons/iceblue/extraIcons/Rechner neu starten.png differ
diff --git a/icons/iceblue/extraIcons/Remote wakeup.png b/icons/iceblue/extraIcons/Remote wakeup.png
new file mode 100644
index 0000000..ee042d8
Binary files /dev/null and b/icons/iceblue/extraIcons/Remote wakeup.png differ
diff --git a/icons/iceblue/extraIcons/Spiele.png b/icons/iceblue/extraIcons/Spiele.png
new file mode 100644
index 0000000..2deb76b
Binary files /dev/null and b/icons/iceblue/extraIcons/Spiele.png differ
diff --git a/icons/iceblue/extraIcons/System herunterfahren.png b/icons/iceblue/extraIcons/System herunterfahren.png
new file mode 100644
index 0000000..b3ff3a4
Binary files /dev/null and b/icons/iceblue/extraIcons/System herunterfahren.png differ
diff --git a/icons/iceblue/extraIcons/System.png b/icons/iceblue/extraIcons/System.png
new file mode 100644
index 0000000..69d8cb1
Binary files /dev/null and b/icons/iceblue/extraIcons/System.png differ
diff --git a/icons/iceblue/extraIcons/Tools.png b/icons/iceblue/extraIcons/Tools.png
new file mode 100644
index 0000000..cc51154
Binary files /dev/null and b/icons/iceblue/extraIcons/Tools.png differ
diff --git a/icons/iceblue/extraIcons/Tunderbird.png b/icons/iceblue/extraIcons/Tunderbird.png
new file mode 100644
index 0000000..38b85af
Binary files /dev/null and b/icons/iceblue/extraIcons/Tunderbird.png differ
diff --git a/icons/iceblue/extraIcons/USB Massenspeicher sicher entfernen.png b/icons/iceblue/extraIcons/USB Massenspeicher sicher entfernen.png
new file mode 100644
index 0000000..7918b84
Binary files /dev/null and b/icons/iceblue/extraIcons/USB Massenspeicher sicher entfernen.png differ
diff --git a/icons/iceblue/extraIcons/VDR neu starten.png b/icons/iceblue/extraIcons/VDR neu starten.png
new file mode 100644
index 0000000..c976ff0
Binary files /dev/null and b/icons/iceblue/extraIcons/VDR neu starten.png differ
diff --git a/icons/iceblue/extraIcons/Video.png b/icons/iceblue/extraIcons/Video.png
new file mode 100644
index 0000000..84231f8
Binary files /dev/null and b/icons/iceblue/extraIcons/Video.png differ
diff --git a/icons/iceblue/extraIcons/Web.png b/icons/iceblue/extraIcons/Web.png
new file mode 100644
index 0000000..b526462
Binary files /dev/null and b/icons/iceblue/extraIcons/Web.png differ
diff --git a/icons/iceblue/extraIcons/XBMC.png b/icons/iceblue/extraIcons/XBMC.png
new file mode 100644
index 0000000..f66ab33
Binary files /dev/null and b/icons/iceblue/extraIcons/XBMC.png differ
diff --git a/icons/iceblue/extraIcons/Xterm.png b/icons/iceblue/extraIcons/Xterm.png
new file mode 100644
index 0000000..9f08a1b
Binary files /dev/null and b/icons/iceblue/extraIcons/Xterm.png differ
diff --git a/icons/iceblue/extraIcons/audiovideo.png b/icons/iceblue/extraIcons/audiovideo.png
new file mode 100644
index 0000000..c70ff4b
Binary files /dev/null and b/icons/iceblue/extraIcons/audiovideo.png differ
diff --git a/icons/iceblue/extraIcons/markad_status.png b/icons/iceblue/extraIcons/markad_status.png
new file mode 100644
index 0000000..bd5b56b
Binary files /dev/null and b/icons/iceblue/extraIcons/markad_status.png differ
diff --git a/icons/iceblue/extraIcons/schneiden_abbrechen.png b/icons/iceblue/extraIcons/schneiden_abbrechen.png
new file mode 100644
index 0000000..00332e2
Binary files /dev/null and b/icons/iceblue/extraIcons/schneiden_abbrechen.png differ
diff --git a/icons/iceblue/extraIcons/tux.png b/icons/iceblue/extraIcons/tux.png
new file mode 100644
index 0000000..ca5da03
Binary files /dev/null and b/icons/iceblue/extraIcons/tux.png differ
diff --git a/icons/iceblue/extraIcons/usb.png b/icons/iceblue/extraIcons/usb.png
new file mode 100644
index 0000000..7d46df6
Binary files /dev/null and b/icons/iceblue/extraIcons/usb.png differ
diff --git a/icons/iceblue/extraIcons/vdrlogo.png b/icons/iceblue/extraIcons/vdrlogo.png
new file mode 100644
index 0000000..8aa4ee8
Binary files /dev/null and b/icons/iceblue/extraIcons/vdrlogo.png differ
diff --git a/icons/iceblue/extraIcons/yaicon_blue.png b/icons/iceblue/extraIcons/yaicon_blue.png
new file mode 100644
index 0000000..4a2e53d
Binary files /dev/null and b/icons/iceblue/extraIcons/yaicon_blue.png differ
diff --git a/icons/iceblue/menuIcons/CAM.png b/icons/iceblue/menuIcons/CAM.png
new file mode 100644
index 0000000..4085804
Binary files /dev/null and b/icons/iceblue/menuIcons/CAM.png differ
diff --git a/icons/iceblue/menuIcons/Channels.png b/icons/iceblue/menuIcons/Channels.png
new file mode 100644
index 0000000..73b0019
Binary files /dev/null and b/icons/iceblue/menuIcons/Channels.png differ
diff --git a/icons/iceblue/menuIcons/Commands.png b/icons/iceblue/menuIcons/Commands.png
new file mode 100644
index 0000000..6bc3910
Binary files /dev/null and b/icons/iceblue/menuIcons/Commands.png differ
diff --git a/icons/iceblue/menuIcons/DVB.png b/icons/iceblue/menuIcons/DVB.png
new file mode 100644
index 0000000..8fd612a
Binary files /dev/null and b/icons/iceblue/menuIcons/DVB.png differ
diff --git a/icons/iceblue/menuIcons/EPG.png b/icons/iceblue/menuIcons/EPG.png
new file mode 100644
index 0000000..f1e9718
Binary files /dev/null and b/icons/iceblue/menuIcons/EPG.png differ
diff --git a/icons/iceblue/menuIcons/LNB.png b/icons/iceblue/menuIcons/LNB.png
new file mode 100644
index 0000000..b5ea15e
Binary files /dev/null and b/icons/iceblue/menuIcons/LNB.png differ
diff --git a/icons/iceblue/menuIcons/Miscellaneous.png b/icons/iceblue/menuIcons/Miscellaneous.png
new file mode 100644
index 0000000..52024d5
Binary files /dev/null and b/icons/iceblue/menuIcons/Miscellaneous.png differ
diff --git a/icons/iceblue/menuIcons/OSD.png b/icons/iceblue/menuIcons/OSD.png
new file mode 100644
index 0000000..3f91cfa
Binary files /dev/null and b/icons/iceblue/menuIcons/OSD.png differ
diff --git a/icons/iceblue/menuIcons/Plugins.png b/icons/iceblue/menuIcons/Plugins.png
new file mode 100644
index 0000000..0239f97
Binary files /dev/null and b/icons/iceblue/menuIcons/Plugins.png differ
diff --git a/icons/iceblue/menuIcons/Recording.png b/icons/iceblue/menuIcons/Recording.png
new file mode 100644
index 0000000..6511a0c
Binary files /dev/null and b/icons/iceblue/menuIcons/Recording.png differ
diff --git a/icons/iceblue/menuIcons/Recordings.png b/icons/iceblue/menuIcons/Recordings.png
new file mode 100644
index 0000000..2c95182
Binary files /dev/null and b/icons/iceblue/menuIcons/Recordings.png differ
diff --git a/icons/iceblue/menuIcons/Replay.png b/icons/iceblue/menuIcons/Replay.png
new file mode 100644
index 0000000..c667b40
Binary files /dev/null and b/icons/iceblue/menuIcons/Replay.png differ
diff --git a/icons/iceblue/menuIcons/Restart.png b/icons/iceblue/menuIcons/Restart.png
new file mode 100644
index 0000000..fe51064
Binary files /dev/null and b/icons/iceblue/menuIcons/Restart.png differ
diff --git a/icons/iceblue/menuIcons/Schedule.png b/icons/iceblue/menuIcons/Schedule.png
new file mode 100644
index 0000000..47e21de
Binary files /dev/null and b/icons/iceblue/menuIcons/Schedule.png differ
diff --git a/icons/iceblue/menuIcons/Setup.png b/icons/iceblue/menuIcons/Setup.png
new file mode 100644
index 0000000..69d8cb1
Binary files /dev/null and b/icons/iceblue/menuIcons/Setup.png differ
diff --git a/icons/iceblue/menuIcons/StopRecording.png b/icons/iceblue/menuIcons/StopRecording.png
new file mode 100644
index 0000000..7d04b0f
Binary files /dev/null and b/icons/iceblue/menuIcons/StopRecording.png differ
diff --git a/icons/iceblue/menuIcons/StopReplay.png b/icons/iceblue/menuIcons/StopReplay.png
new file mode 100644
index 0000000..1887be7
Binary files /dev/null and b/icons/iceblue/menuIcons/StopReplay.png differ
diff --git a/icons/iceblue/menuIcons/Timers.png b/icons/iceblue/menuIcons/Timers.png
new file mode 100644
index 0000000..d5ac0f0
Binary files /dev/null and b/icons/iceblue/menuIcons/Timers.png differ
diff --git a/icons/iceblue/pluginIcons/arghdirector.png b/icons/iceblue/pluginIcons/arghdirector.png
new file mode 100644
index 0000000..9f16505
Binary files /dev/null and b/icons/iceblue/pluginIcons/arghdirector.png differ
diff --git a/icons/iceblue/pluginIcons/autostart.png b/icons/iceblue/pluginIcons/autostart.png
new file mode 100644
index 0000000..a9abe13
Binary files /dev/null and b/icons/iceblue/pluginIcons/autostart.png differ
diff --git a/icons/iceblue/pluginIcons/avahi4vdr.png b/icons/iceblue/pluginIcons/avahi4vdr.png
new file mode 100644
index 0000000..2a3f94b
Binary files /dev/null and b/icons/iceblue/pluginIcons/avahi4vdr.png differ
diff --git a/icons/iceblue/pluginIcons/avards.png b/icons/iceblue/pluginIcons/avards.png
new file mode 100644
index 0000000..e71677d
Binary files /dev/null and b/icons/iceblue/pluginIcons/avards.png differ
diff --git a/icons/iceblue/pluginIcons/block.png b/icons/iceblue/pluginIcons/block.png
new file mode 100644
index 0000000..161a6b0
Binary files /dev/null and b/icons/iceblue/pluginIcons/block.png differ
diff --git a/icons/iceblue/pluginIcons/burn.png b/icons/iceblue/pluginIcons/burn.png
new file mode 100644
index 0000000..5f2df0c
Binary files /dev/null and b/icons/iceblue/pluginIcons/burn.png differ
diff --git a/icons/iceblue/pluginIcons/cdplayer.png b/icons/iceblue/pluginIcons/cdplayer.png
new file mode 100644
index 0000000..571cfe2
Binary files /dev/null and b/icons/iceblue/pluginIcons/cdplayer.png differ
diff --git a/icons/iceblue/pluginIcons/chanman.png b/icons/iceblue/pluginIcons/chanman.png
new file mode 100644
index 0000000..6eb08c2
Binary files /dev/null and b/icons/iceblue/pluginIcons/chanman.png differ
diff --git a/icons/iceblue/pluginIcons/check.png b/icons/iceblue/pluginIcons/check.png
new file mode 100644
index 0000000..7c6253e
Binary files /dev/null and b/icons/iceblue/pluginIcons/check.png differ
diff --git a/icons/iceblue/pluginIcons/conflictcheckonly.png b/icons/iceblue/pluginIcons/conflictcheckonly.png
new file mode 100644
index 0000000..00a2a01
Binary files /dev/null and b/icons/iceblue/pluginIcons/conflictcheckonly.png differ
diff --git a/icons/iceblue/pluginIcons/ddci.png b/icons/iceblue/pluginIcons/ddci.png
new file mode 100644
index 0000000..a60c265
Binary files /dev/null and b/icons/iceblue/pluginIcons/ddci.png differ
diff --git a/icons/iceblue/pluginIcons/devstatus.png b/icons/iceblue/pluginIcons/devstatus.png
new file mode 100644
index 0000000..3c70b21
Binary files /dev/null and b/icons/iceblue/pluginIcons/devstatus.png differ
diff --git a/icons/iceblue/pluginIcons/ding1.png b/icons/iceblue/pluginIcons/ding1.png
new file mode 100644
index 0000000..c432228
Binary files /dev/null and b/icons/iceblue/pluginIcons/ding1.png differ
diff --git a/icons/iceblue/pluginIcons/dummydevice.png b/icons/iceblue/pluginIcons/dummydevice.png
new file mode 100644
index 0000000..c29a2e1
Binary files /dev/null and b/icons/iceblue/pluginIcons/dummydevice.png differ
diff --git a/icons/iceblue/pluginIcons/duplicates.png b/icons/iceblue/pluginIcons/duplicates.png
new file mode 100644
index 0000000..e0e2066
Binary files /dev/null and b/icons/iceblue/pluginIcons/duplicates.png differ
diff --git a/icons/iceblue/pluginIcons/dvbhddevice.png b/icons/iceblue/pluginIcons/dvbhddevice.png
new file mode 100644
index 0000000..f203ba5
Binary files /dev/null and b/icons/iceblue/pluginIcons/dvbhddevice.png differ
diff --git a/icons/iceblue/pluginIcons/dvbsddevice.png b/icons/iceblue/pluginIcons/dvbsddevice.png
new file mode 100644
index 0000000..b0f8c65
Binary files /dev/null and b/icons/iceblue/pluginIcons/dvbsddevice.png differ
diff --git a/icons/iceblue/pluginIcons/dynamite.png b/icons/iceblue/pluginIcons/dynamite.png
new file mode 100644
index 0000000..45daade
Binary files /dev/null and b/icons/iceblue/pluginIcons/dynamite.png differ
diff --git a/icons/iceblue/pluginIcons/eepg.png b/icons/iceblue/pluginIcons/eepg.png
new file mode 100644
index 0000000..cd811b2
Binary files /dev/null and b/icons/iceblue/pluginIcons/eepg.png differ
diff --git a/icons/iceblue/pluginIcons/epgsearch.png b/icons/iceblue/pluginIcons/epgsearch.png
new file mode 100644
index 0000000..5c94368
Binary files /dev/null and b/icons/iceblue/pluginIcons/epgsearch.png differ
diff --git a/icons/iceblue/pluginIcons/epgsearchonly.png b/icons/iceblue/pluginIcons/epgsearchonly.png
new file mode 100644
index 0000000..de643ad
Binary files /dev/null and b/icons/iceblue/pluginIcons/epgsearchonly.png differ
diff --git a/icons/iceblue/pluginIcons/epgsync.png b/icons/iceblue/pluginIcons/epgsync.png
new file mode 100644
index 0000000..410940e
Binary files /dev/null and b/icons/iceblue/pluginIcons/epgsync.png differ
diff --git a/icons/iceblue/pluginIcons/externalplayer.png b/icons/iceblue/pluginIcons/externalplayer.png
new file mode 100644
index 0000000..249a22b
Binary files /dev/null and b/icons/iceblue/pluginIcons/externalplayer.png differ
diff --git a/icons/iceblue/pluginIcons/extrecmenu.png b/icons/iceblue/pluginIcons/extrecmenu.png
new file mode 100644
index 0000000..97dd5fd
Binary files /dev/null and b/icons/iceblue/pluginIcons/extrecmenu.png differ
diff --git a/icons/iceblue/pluginIcons/favorites.png b/icons/iceblue/pluginIcons/favorites.png
new file mode 100644
index 0000000..0a0f400
Binary files /dev/null and b/icons/iceblue/pluginIcons/favorites.png differ
diff --git a/icons/iceblue/pluginIcons/femon.png b/icons/iceblue/pluginIcons/femon.png
new file mode 100644
index 0000000..1663296
Binary files /dev/null and b/icons/iceblue/pluginIcons/femon.png differ
diff --git a/icons/iceblue/pluginIcons/fepg.png b/icons/iceblue/pluginIcons/fepg.png
new file mode 100644
index 0000000..c1276c4
Binary files /dev/null and b/icons/iceblue/pluginIcons/fepg.png differ
diff --git a/icons/iceblue/pluginIcons/filebrowser.png b/icons/iceblue/pluginIcons/filebrowser.png
new file mode 100644
index 0000000..caf2a97
Binary files /dev/null and b/icons/iceblue/pluginIcons/filebrowser.png differ
diff --git a/icons/iceblue/pluginIcons/fritzbox.png b/icons/iceblue/pluginIcons/fritzbox.png
new file mode 100644
index 0000000..6cf7413
Binary files /dev/null and b/icons/iceblue/pluginIcons/fritzbox.png differ
diff --git a/icons/iceblue/pluginIcons/graphlcd.png b/icons/iceblue/pluginIcons/graphlcd.png
new file mode 100644
index 0000000..781091f
Binary files /dev/null and b/icons/iceblue/pluginIcons/graphlcd.png differ
diff --git a/icons/iceblue/pluginIcons/graphtft.png b/icons/iceblue/pluginIcons/graphtft.png
new file mode 100644
index 0000000..67f877f
Binary files /dev/null and b/icons/iceblue/pluginIcons/graphtft.png differ
diff --git a/icons/iceblue/pluginIcons/image.png b/icons/iceblue/pluginIcons/image.png
new file mode 100644
index 0000000..06d37e9
Binary files /dev/null and b/icons/iceblue/pluginIcons/image.png differ
diff --git a/icons/iceblue/pluginIcons/imonlcd.png b/icons/iceblue/pluginIcons/imonlcd.png
new file mode 100644
index 0000000..7b30f53
Binary files /dev/null and b/icons/iceblue/pluginIcons/imonlcd.png differ
diff --git a/icons/iceblue/pluginIcons/iptv.png b/icons/iceblue/pluginIcons/iptv.png
new file mode 100644
index 0000000..d923a9d
Binary files /dev/null and b/icons/iceblue/pluginIcons/iptv.png differ
diff --git a/icons/iceblue/pluginIcons/lcdproc.png b/icons/iceblue/pluginIcons/lcdproc.png
new file mode 100644
index 0000000..47e21de
Binary files /dev/null and b/icons/iceblue/pluginIcons/lcdproc.png differ
diff --git a/icons/iceblue/pluginIcons/mailbox.png b/icons/iceblue/pluginIcons/mailbox.png
new file mode 100644
index 0000000..a44746d
Binary files /dev/null and b/icons/iceblue/pluginIcons/mailbox.png differ
diff --git a/icons/iceblue/pluginIcons/markad.png b/icons/iceblue/pluginIcons/markad.png
new file mode 100644
index 0000000..bd5b56b
Binary files /dev/null and b/icons/iceblue/pluginIcons/markad.png differ
diff --git a/icons/iceblue/pluginIcons/mlist.png b/icons/iceblue/pluginIcons/mlist.png
new file mode 100644
index 0000000..1a6278f
Binary files /dev/null and b/icons/iceblue/pluginIcons/mlist.png differ
diff --git a/icons/iceblue/pluginIcons/music.png b/icons/iceblue/pluginIcons/music.png
new file mode 100644
index 0000000..a5f100b
Binary files /dev/null and b/icons/iceblue/pluginIcons/music.png differ
diff --git a/icons/iceblue/pluginIcons/noepg3.png b/icons/iceblue/pluginIcons/noepg3.png
new file mode 100644
index 0000000..75d5c8c
Binary files /dev/null and b/icons/iceblue/pluginIcons/noepg3.png differ
diff --git a/icons/iceblue/pluginIcons/osdteletext.png b/icons/iceblue/pluginIcons/osdteletext.png
new file mode 100644
index 0000000..b21465a
Binary files /dev/null and b/icons/iceblue/pluginIcons/osdteletext.png differ
diff --git a/icons/iceblue/pluginIcons/pvrinput.png b/icons/iceblue/pluginIcons/pvrinput.png
new file mode 100644
index 0000000..89aec34
Binary files /dev/null and b/icons/iceblue/pluginIcons/pvrinput.png differ
diff --git a/icons/iceblue/pluginIcons/quickepgsearch.png b/icons/iceblue/pluginIcons/quickepgsearch.png
new file mode 100644
index 0000000..99d5d32
Binary files /dev/null and b/icons/iceblue/pluginIcons/quickepgsearch.png differ
diff --git a/icons/iceblue/pluginIcons/radio.png b/icons/iceblue/pluginIcons/radio.png
new file mode 100644
index 0000000..fa91c9b
Binary files /dev/null and b/icons/iceblue/pluginIcons/radio.png differ
diff --git a/icons/iceblue/pluginIcons/remote.png b/icons/iceblue/pluginIcons/remote.png
new file mode 100644
index 0000000..68368b4
Binary files /dev/null and b/icons/iceblue/pluginIcons/remote.png differ
diff --git a/icons/iceblue/pluginIcons/remotetimers.png b/icons/iceblue/pluginIcons/remotetimers.png
new file mode 100644
index 0000000..48cde95
Binary files /dev/null and b/icons/iceblue/pluginIcons/remotetimers.png differ
diff --git a/icons/iceblue/pluginIcons/rssreader.png b/icons/iceblue/pluginIcons/rssreader.png
new file mode 100644
index 0000000..efde03f
Binary files /dev/null and b/icons/iceblue/pluginIcons/rssreader.png differ
diff --git a/icons/iceblue/pluginIcons/sc.png b/icons/iceblue/pluginIcons/sc.png
new file mode 100644
index 0000000..2565498
Binary files /dev/null and b/icons/iceblue/pluginIcons/sc.png differ
diff --git a/icons/iceblue/pluginIcons/screenshot.png b/icons/iceblue/pluginIcons/screenshot.png
new file mode 100644
index 0000000..67da61e
Binary files /dev/null and b/icons/iceblue/pluginIcons/screenshot.png differ
diff --git a/icons/iceblue/pluginIcons/seduatmo.png b/icons/iceblue/pluginIcons/seduatmo.png
new file mode 100644
index 0000000..d9f3640
Binary files /dev/null and b/icons/iceblue/pluginIcons/seduatmo.png differ
diff --git a/icons/iceblue/pluginIcons/skyselect.png b/icons/iceblue/pluginIcons/skyselect.png
new file mode 100644
index 0000000..4f106cd
Binary files /dev/null and b/icons/iceblue/pluginIcons/skyselect.png differ
diff --git a/icons/iceblue/pluginIcons/sleeptimer.png b/icons/iceblue/pluginIcons/sleeptimer.png
new file mode 100644
index 0000000..e77a565
Binary files /dev/null and b/icons/iceblue/pluginIcons/sleeptimer.png differ
diff --git a/icons/iceblue/pluginIcons/softhddevice.png b/icons/iceblue/pluginIcons/softhddevice.png
new file mode 100644
index 0000000..f1de4df
Binary files /dev/null and b/icons/iceblue/pluginIcons/softhddevice.png differ
diff --git a/icons/iceblue/pluginIcons/streamdev-server.png b/icons/iceblue/pluginIcons/streamdev-server.png
new file mode 100644
index 0000000..430ec58
Binary files /dev/null and b/icons/iceblue/pluginIcons/streamdev-server.png differ
diff --git a/icons/iceblue/pluginIcons/systeminfo.png b/icons/iceblue/pluginIcons/systeminfo.png
new file mode 100644
index 0000000..ea3c0c7
Binary files /dev/null and b/icons/iceblue/pluginIcons/systeminfo.png differ
diff --git a/icons/iceblue/pluginIcons/targavfd.png b/icons/iceblue/pluginIcons/targavfd.png
new file mode 100644
index 0000000..34757d1
Binary files /dev/null and b/icons/iceblue/pluginIcons/targavfd.png differ
diff --git a/icons/iceblue/pluginIcons/trayopenng.png b/icons/iceblue/pluginIcons/trayopenng.png
new file mode 100644
index 0000000..e39fd61
Binary files /dev/null and b/icons/iceblue/pluginIcons/trayopenng.png differ
diff --git a/icons/iceblue/pluginIcons/tvguide.png b/icons/iceblue/pluginIcons/tvguide.png
new file mode 100644
index 0000000..7a2cee7
Binary files /dev/null and b/icons/iceblue/pluginIcons/tvguide.png differ
diff --git a/icons/iceblue/pluginIcons/tvm2vdr.png b/icons/iceblue/pluginIcons/tvm2vdr.png
new file mode 100644
index 0000000..1e3c81c
Binary files /dev/null and b/icons/iceblue/pluginIcons/tvm2vdr.png differ
diff --git a/icons/iceblue/pluginIcons/undelete.png b/icons/iceblue/pluginIcons/undelete.png
new file mode 100644
index 0000000..31947b5
Binary files /dev/null and b/icons/iceblue/pluginIcons/undelete.png differ
diff --git a/icons/iceblue/pluginIcons/weatherng.png b/icons/iceblue/pluginIcons/weatherng.png
new file mode 100644
index 0000000..53dc882
Binary files /dev/null and b/icons/iceblue/pluginIcons/weatherng.png differ
diff --git a/icons/iceblue/pluginIcons/xml2vdr.png b/icons/iceblue/pluginIcons/xml2vdr.png
new file mode 100644
index 0000000..1f604e4
Binary files /dev/null and b/icons/iceblue/pluginIcons/xml2vdr.png differ
diff --git a/icons/iceblue/skinIcons/Channelseparator.png b/icons/iceblue/skinIcons/Channelseparator.png
new file mode 100644
index 0000000..22183c1
Binary files /dev/null and b/icons/iceblue/skinIcons/Channelseparator.png differ
diff --git a/icons/iceblue/skinIcons/DiskUsage.png b/icons/iceblue/skinIcons/DiskUsage.png
new file mode 100644
index 0000000..7aaec7e
Binary files /dev/null and b/icons/iceblue/skinIcons/DiskUsage.png differ
diff --git a/icons/iceblue/skinIcons/ac3.png b/icons/iceblue/skinIcons/ac3.png
new file mode 100644
index 0000000..adbef68
Binary files /dev/null and b/icons/iceblue/skinIcons/ac3.png differ
diff --git a/icons/iceblue/skinIcons/activetimer.png b/icons/iceblue/skinIcons/activetimer.png
new file mode 100644
index 0000000..8ba66f7
Binary files /dev/null and b/icons/iceblue/skinIcons/activetimer.png differ
diff --git a/icons/iceblue/skinIcons/activetimersmall.png b/icons/iceblue/skinIcons/activetimersmall.png
new file mode 100644
index 0000000..3cac59f
Binary files /dev/null and b/icons/iceblue/skinIcons/activetimersmall.png differ
diff --git a/icons/darkred/skinIcons/channelsymbols.png b/icons/iceblue/skinIcons/channelsymbols.png
similarity index 100%
copy from icons/darkred/skinIcons/channelsymbols.png
copy to icons/iceblue/skinIcons/channelsymbols.png
diff --git a/icons/iceblue/skinIcons/daydelimiter.png b/icons/iceblue/skinIcons/daydelimiter.png
new file mode 100644
index 0000000..a8a4712
Binary files /dev/null and b/icons/iceblue/skinIcons/daydelimiter.png differ
diff --git a/icons/iceblue/skinIcons/encrypted.png b/icons/iceblue/skinIcons/encrypted.png
new file mode 100644
index 0000000..bc93794
Binary files /dev/null and b/icons/iceblue/skinIcons/encrypted.png differ
diff --git a/icons/skinIcons/fwd.png b/icons/iceblue/skinIcons/fwd.png
similarity index 77%
copy from icons/skinIcons/fwd.png
copy to icons/iceblue/skinIcons/fwd.png
index 13b4751..7d0eb16 100644
Binary files a/icons/skinIcons/fwd.png and b/icons/iceblue/skinIcons/fwd.png differ
diff --git a/icons/iceblue/skinIcons/fwdInactive.png b/icons/iceblue/skinIcons/fwdInactive.png
new file mode 100644
index 0000000..728b059
Binary files /dev/null and b/icons/iceblue/skinIcons/fwdInactive.png differ
diff --git a/icons/iceblue/skinIcons/newrecording.png b/icons/iceblue/skinIcons/newrecording.png
new file mode 100644
index 0000000..e7cf8cf
Binary files /dev/null and b/icons/iceblue/skinIcons/newrecording.png differ
diff --git a/icons/skinIcons/pause.png b/icons/iceblue/skinIcons/pause.png
similarity index 75%
copy from icons/skinIcons/pause.png
copy to icons/iceblue/skinIcons/pause.png
index e6577cf..9188b6b 100644
Binary files a/icons/skinIcons/pause.png and b/icons/iceblue/skinIcons/pause.png differ
diff --git a/icons/iceblue/skinIcons/pauseInactive.png b/icons/iceblue/skinIcons/pauseInactive.png
new file mode 100644
index 0000000..3798a93
Binary files /dev/null and b/icons/iceblue/skinIcons/pauseInactive.png differ
diff --git a/icons/skinIcons/play.png b/icons/iceblue/skinIcons/play.png
similarity index 80%
copy from icons/skinIcons/play.png
copy to icons/iceblue/skinIcons/play.png
index b0c8a18..0a94023 100644
Binary files a/icons/skinIcons/play.png and b/icons/iceblue/skinIcons/play.png differ
diff --git a/icons/iceblue/skinIcons/playInactive.png b/icons/iceblue/skinIcons/playInactive.png
new file mode 100644
index 0000000..e7fe2c7
Binary files /dev/null and b/icons/iceblue/skinIcons/playInactive.png differ
diff --git a/icons/iceblue/skinIcons/recordingcutted.png b/icons/iceblue/skinIcons/recordingcutted.png
new file mode 100644
index 0000000..f23d185
Binary files /dev/null and b/icons/iceblue/skinIcons/recordingcutted.png differ
diff --git a/icons/iceblue/skinIcons/recordingdatetime.png b/icons/iceblue/skinIcons/recordingdatetime.png
new file mode 100644
index 0000000..25b8e93
Binary files /dev/null and b/icons/iceblue/skinIcons/recordingdatetime.png differ
diff --git a/icons/iceblue/skinIcons/recordingfolder.png b/icons/iceblue/skinIcons/recordingfolder.png
new file mode 100644
index 0000000..f952c4b
Binary files /dev/null and b/icons/iceblue/skinIcons/recordingfolder.png differ
diff --git a/icons/skinIcons/rew.png b/icons/iceblue/skinIcons/rew.png
similarity index 82%
copy from icons/skinIcons/rew.png
copy to icons/iceblue/skinIcons/rew.png
index 7055823..6728d07 100644
Binary files a/icons/skinIcons/rew.png and b/icons/iceblue/skinIcons/rew.png differ
diff --git a/icons/iceblue/skinIcons/rewInactive.png b/icons/iceblue/skinIcons/rewInactive.png
new file mode 100644
index 0000000..7fd8cd2
Binary files /dev/null and b/icons/iceblue/skinIcons/rewInactive.png differ
diff --git a/icons/iceblue/skinIcons/signal.png b/icons/iceblue/skinIcons/signal.png
new file mode 100644
index 0000000..4f03c7a
Binary files /dev/null and b/icons/iceblue/skinIcons/signal.png differ
diff --git a/icons/iceblue/skinIcons/stereo.png b/icons/iceblue/skinIcons/stereo.png
new file mode 100644
index 0000000..9f3b3e5
Binary files /dev/null and b/icons/iceblue/skinIcons/stereo.png differ
diff --git a/icons/iceblue/skinIcons/timerActive.png b/icons/iceblue/skinIcons/timerActive.png
new file mode 100644
index 0000000..ec30010
Binary files /dev/null and b/icons/iceblue/skinIcons/timerActive.png differ
diff --git a/icons/iceblue/skinIcons/timerInactive.png b/icons/iceblue/skinIcons/timerInactive.png
new file mode 100644
index 0000000..3630d29
Binary files /dev/null and b/icons/iceblue/skinIcons/timerInactive.png differ
diff --git a/icons/skinIcons/timerRecording.png b/icons/iceblue/skinIcons/timerRecording.png
similarity index 93%
copy from icons/skinIcons/timerRecording.png
copy to icons/iceblue/skinIcons/timerRecording.png
index 3f253fb..dd1b062 100644
Binary files a/icons/skinIcons/timerRecording.png and b/icons/iceblue/skinIcons/timerRecording.png differ
diff --git a/icons/iceblue/skinIcons/tracks.png b/icons/iceblue/skinIcons/tracks.png
new file mode 100644
index 0000000..d8f1960
Binary files /dev/null and b/icons/iceblue/skinIcons/tracks.png differ
diff --git a/icons/iceblue/skinIcons/vdrlogo.png b/icons/iceblue/skinIcons/vdrlogo.png
new file mode 100644
index 0000000..99a6365
Binary files /dev/null and b/icons/iceblue/skinIcons/vdrlogo.png differ
diff --git a/icons/iceblue/skinIcons/yavdrlogo.png b/icons/iceblue/skinIcons/yavdrlogo.png
new file mode 100644
index 0000000..81a830a
Binary files /dev/null and b/icons/iceblue/skinIcons/yavdrlogo.png differ
diff --git a/icons/light/menuIcons/Channels.png b/icons/light/menuIcons/Channels.png
new file mode 100644
index 0000000..a66188b
Binary files /dev/null and b/icons/light/menuIcons/Channels.png differ
diff --git a/icons/light/menuIcons/Commands.png b/icons/light/menuIcons/Commands.png
new file mode 100644
index 0000000..1108e3c
Binary files /dev/null and b/icons/light/menuIcons/Commands.png differ
diff --git a/icons/light/menuIcons/Recordings.png b/icons/light/menuIcons/Recordings.png
new file mode 100644
index 0000000..c9c3265
Binary files /dev/null and b/icons/light/menuIcons/Recordings.png differ
diff --git a/icons/light/menuIcons/Schedule.png b/icons/light/menuIcons/Schedule.png
new file mode 100644
index 0000000..5f4d619
Binary files /dev/null and b/icons/light/menuIcons/Schedule.png differ
diff --git a/icons/light/menuIcons/Setup.png b/icons/light/menuIcons/Setup.png
new file mode 100644
index 0000000..a82e5c7
Binary files /dev/null and b/icons/light/menuIcons/Setup.png differ
diff --git a/icons/light/menuIcons/Timers.png b/icons/light/menuIcons/Timers.png
new file mode 100644
index 0000000..7358106
Binary files /dev/null and b/icons/light/menuIcons/Timers.png differ
diff --git a/icons/light/skinIcons/Channelseparator.png b/icons/light/skinIcons/Channelseparator.png
new file mode 100644
index 0000000..fd215a2
Binary files /dev/null and b/icons/light/skinIcons/Channelseparator.png differ
diff --git a/icons/light/skinIcons/DiskUsage.png b/icons/light/skinIcons/DiskUsage.png
new file mode 100644
index 0000000..9b8cc8d
Binary files /dev/null and b/icons/light/skinIcons/DiskUsage.png differ
diff --git a/icons/light/skinIcons/ac3.png b/icons/light/skinIcons/ac3.png
new file mode 100644
index 0000000..f59e6b3
Binary files /dev/null and b/icons/light/skinIcons/ac3.png differ
diff --git a/icons/light/skinIcons/activetimer.png b/icons/light/skinIcons/activetimer.png
new file mode 100644
index 0000000..e944b00
Binary files /dev/null and b/icons/light/skinIcons/activetimer.png differ
diff --git a/icons/light/skinIcons/activetimersmall.png b/icons/light/skinIcons/activetimersmall.png
new file mode 100644
index 0000000..138ff35
Binary files /dev/null and b/icons/light/skinIcons/activetimersmall.png differ
diff --git a/icons/light/skinIcons/arrowLeftChannelSep.png b/icons/light/skinIcons/arrowLeftChannelSep.png
new file mode 100644
index 0000000..5f3ccd4
Binary files /dev/null and b/icons/light/skinIcons/arrowLeftChannelSep.png differ
diff --git a/icons/light/skinIcons/arrowRightChannelSep.png b/icons/light/skinIcons/arrowRightChannelSep.png
new file mode 100644
index 0000000..8c77fe4
Binary files /dev/null and b/icons/light/skinIcons/arrowRightChannelSep.png differ
diff --git a/icons/light/skinIcons/channeldelimiter.png b/icons/light/skinIcons/channeldelimiter.png
new file mode 100644
index 0000000..2580189
Binary files /dev/null and b/icons/light/skinIcons/channeldelimiter.png differ
diff --git a/icons/light/skinIcons/channelsymbols.png b/icons/light/skinIcons/channelsymbols.png
new file mode 100644
index 0000000..2ba023d
Binary files /dev/null and b/icons/light/skinIcons/channelsymbols.png differ
diff --git a/icons/light/skinIcons/crypted.png b/icons/light/skinIcons/crypted.png
new file mode 100644
index 0000000..1aec146
Binary files /dev/null and b/icons/light/skinIcons/crypted.png differ
diff --git a/icons/light/skinIcons/encrypted.png b/icons/light/skinIcons/encrypted.png
new file mode 100644
index 0000000..12f0870
Binary files /dev/null and b/icons/light/skinIcons/encrypted.png differ
diff --git a/icons/light/skinIcons/fta.png b/icons/light/skinIcons/fta.png
new file mode 100644
index 0000000..55e3789
Binary files /dev/null and b/icons/light/skinIcons/fta.png differ
diff --git a/icons/light/skinIcons/fwd.png b/icons/light/skinIcons/fwd.png
new file mode 100644
index 0000000..30aef68
Binary files /dev/null and b/icons/light/skinIcons/fwd.png differ
diff --git a/icons/light/skinIcons/fwdInactive.png b/icons/light/skinIcons/fwdInactive.png
new file mode 100644
index 0000000..185d579
Binary files /dev/null and b/icons/light/skinIcons/fwdInactive.png differ
diff --git a/icons/light/skinIcons/fwdx1.png b/icons/light/skinIcons/fwdx1.png
new file mode 100644
index 0000000..77af2ea
Binary files /dev/null and b/icons/light/skinIcons/fwdx1.png differ
diff --git a/icons/light/skinIcons/fwdx2.png b/icons/light/skinIcons/fwdx2.png
new file mode 100644
index 0000000..1340ded
Binary files /dev/null and b/icons/light/skinIcons/fwdx2.png differ
diff --git a/icons/light/skinIcons/fwdx3.png b/icons/light/skinIcons/fwdx3.png
new file mode 100644
index 0000000..2dca6af
Binary files /dev/null and b/icons/light/skinIcons/fwdx3.png differ
diff --git a/icons/light/skinIcons/hd1080i.png b/icons/light/skinIcons/hd1080i.png
new file mode 100644
index 0000000..1a863a9
Binary files /dev/null and b/icons/light/skinIcons/hd1080i.png differ
diff --git a/icons/light/skinIcons/hd1080i_rec.png b/icons/light/skinIcons/hd1080i_rec.png
new file mode 100644
index 0000000..1a863a9
Binary files /dev/null and b/icons/light/skinIcons/hd1080i_rec.png differ
diff --git a/icons/light/skinIcons/hd720p.png b/icons/light/skinIcons/hd720p.png
new file mode 100644
index 0000000..47317d8
Binary files /dev/null and b/icons/light/skinIcons/hd720p.png differ
diff --git a/icons/light/skinIcons/hd720p_rec.png b/icons/light/skinIcons/hd720p_rec.png
new file mode 100644
index 0000000..47317d8
Binary files /dev/null and b/icons/light/skinIcons/hd720p_rec.png differ
diff --git a/icons/light/skinIcons/newrecording.png b/icons/light/skinIcons/newrecording.png
new file mode 100644
index 0000000..51d5f86
Binary files /dev/null and b/icons/light/skinIcons/newrecording.png differ
diff --git a/icons/light/skinIcons/pause.png b/icons/light/skinIcons/pause.png
new file mode 100644
index 0000000..2e8ea5d
Binary files /dev/null and b/icons/light/skinIcons/pause.png differ
diff --git a/icons/light/skinIcons/pauseInactive.png b/icons/light/skinIcons/pauseInactive.png
new file mode 100644
index 0000000..fc1a34a
Binary files /dev/null and b/icons/light/skinIcons/pauseInactive.png differ
diff --git a/icons/light/skinIcons/play.png b/icons/light/skinIcons/play.png
new file mode 100644
index 0000000..b1b3a07
Binary files /dev/null and b/icons/light/skinIcons/play.png differ
diff --git a/icons/light/skinIcons/playInactive.png b/icons/light/skinIcons/playInactive.png
new file mode 100644
index 0000000..11134b9
Binary files /dev/null and b/icons/light/skinIcons/playInactive.png differ
diff --git a/icons/light/skinIcons/recfolder.png b/icons/light/skinIcons/recfolder.png
new file mode 100644
index 0000000..dcc7ee5
Binary files /dev/null and b/icons/light/skinIcons/recfolder.png differ
diff --git a/icons/light/skinIcons/recoff.png b/icons/light/skinIcons/recoff.png
new file mode 100644
index 0000000..8b9a02a
Binary files /dev/null and b/icons/light/skinIcons/recoff.png differ
diff --git a/icons/light/skinIcons/recon.png b/icons/light/skinIcons/recon.png
new file mode 100644
index 0000000..1f3df80
Binary files /dev/null and b/icons/light/skinIcons/recon.png differ
diff --git a/icons/light/skinIcons/recordingcutted.png b/icons/light/skinIcons/recordingcutted.png
new file mode 100644
index 0000000..325b21f
Binary files /dev/null and b/icons/light/skinIcons/recordingcutted.png differ
diff --git a/icons/light/skinIcons/recordingdatetime.png b/icons/light/skinIcons/recordingdatetime.png
new file mode 100644
index 0000000..f7f9471
Binary files /dev/null and b/icons/light/skinIcons/recordingdatetime.png differ
diff --git a/icons/light/skinIcons/rew.png b/icons/light/skinIcons/rew.png
new file mode 100644
index 0000000..97e2b43
Binary files /dev/null and b/icons/light/skinIcons/rew.png differ
diff --git a/icons/light/skinIcons/rewInactive.png b/icons/light/skinIcons/rewInactive.png
new file mode 100644
index 0000000..4935e97
Binary files /dev/null and b/icons/light/skinIcons/rewInactive.png differ
diff --git a/icons/light/skinIcons/rewx1.png b/icons/light/skinIcons/rewx1.png
new file mode 100644
index 0000000..9bf0367
Binary files /dev/null and b/icons/light/skinIcons/rewx1.png differ
diff --git a/icons/light/skinIcons/rewx2.png b/icons/light/skinIcons/rewx2.png
new file mode 100644
index 0000000..52fc211
Binary files /dev/null and b/icons/light/skinIcons/rewx2.png differ
diff --git a/icons/light/skinIcons/rewx3.png b/icons/light/skinIcons/rewx3.png
new file mode 100644
index 0000000..d6eef15
Binary files /dev/null and b/icons/light/skinIcons/rewx3.png differ
diff --git a/icons/light/skinIcons/rss.png b/icons/light/skinIcons/rss.png
new file mode 100644
index 0000000..6181dee
Binary files /dev/null and b/icons/light/skinIcons/rss.png differ
diff --git a/icons/light/skinIcons/sd576i.png b/icons/light/skinIcons/sd576i.png
new file mode 100644
index 0000000..994a7a2
Binary files /dev/null and b/icons/light/skinIcons/sd576i.png differ
diff --git a/icons/light/skinIcons/sd576i_rec.png b/icons/light/skinIcons/sd576i_rec.png
new file mode 100644
index 0000000..994a7a2
Binary files /dev/null and b/icons/light/skinIcons/sd576i_rec.png differ
diff --git a/icons/light/skinIcons/stereo.png b/icons/light/skinIcons/stereo.png
new file mode 100644
index 0000000..3c63f7f
Binary files /dev/null and b/icons/light/skinIcons/stereo.png differ
diff --git a/icons/light/skinIcons/stereooff.png b/icons/light/skinIcons/stereooff.png
new file mode 100644
index 0000000..569a342
Binary files /dev/null and b/icons/light/skinIcons/stereooff.png differ
diff --git a/icons/light/skinIcons/stereoon.png b/icons/light/skinIcons/stereoon.png
new file mode 100644
index 0000000..eb838b9
Binary files /dev/null and b/icons/light/skinIcons/stereoon.png differ
diff --git a/icons/light/skinIcons/timerActive.png b/icons/light/skinIcons/timerActive.png
new file mode 100644
index 0000000..e62fd96
Binary files /dev/null and b/icons/light/skinIcons/timerActive.png differ
diff --git a/icons/light/skinIcons/timerInactive.png b/icons/light/skinIcons/timerInactive.png
new file mode 100644
index 0000000..27c5464
Binary files /dev/null and b/icons/light/skinIcons/timerInactive.png differ
diff --git a/icons/light/skinIcons/timerRecording.png b/icons/light/skinIcons/timerRecording.png
new file mode 100644
index 0000000..56d6027
Binary files /dev/null and b/icons/light/skinIcons/timerRecording.png differ
diff --git a/icons/light/skinIcons/tracks.png b/icons/light/skinIcons/tracks.png
new file mode 100644
index 0000000..3a1e577
Binary files /dev/null and b/icons/light/skinIcons/tracks.png differ
diff --git a/icons/light/skinIcons/txtoff.png b/icons/light/skinIcons/txtoff.png
new file mode 100644
index 0000000..3b2eac3
Binary files /dev/null and b/icons/light/skinIcons/txtoff.png differ
diff --git a/icons/light/skinIcons/txton.png b/icons/light/skinIcons/txton.png
new file mode 100644
index 0000000..148f9ef
Binary files /dev/null and b/icons/light/skinIcons/txton.png differ
diff --git a/icons/light/skinIcons/vdrlogo.png b/icons/light/skinIcons/vdrlogo.png
new file mode 100644
index 0000000..9f95176
Binary files /dev/null and b/icons/light/skinIcons/vdrlogo.png differ
diff --git a/icons/pluginIcons/Thumbs.db b/icons/pluginIcons/Thumbs.db
deleted file mode 100644
index 7fc5832..0000000
Binary files a/icons/pluginIcons/Thumbs.db and /dev/null differ
diff --git a/icons/pluginIcons/dvbhddevice.png b/icons/pluginIcons/dvbhddevice.png
new file mode 100644
index 0000000..4785264
Binary files /dev/null and b/icons/pluginIcons/dvbhddevice.png differ
diff --git a/icons/pluginIcons/dvbsddevice.png b/icons/pluginIcons/dvbsddevice.png
new file mode 100644
index 0000000..ff870d6
Binary files /dev/null and b/icons/pluginIcons/dvbsddevice.png differ
diff --git a/icons/pluginIcons/graphtft.png b/icons/pluginIcons/graphtft.png
new file mode 100644
index 0000000..66890af
Binary files /dev/null and b/icons/pluginIcons/graphtft.png differ
diff --git a/icons/pluginIcons/nordlichtsepg.png b/icons/pluginIcons/nordlichtsepg.png
new file mode 100644
index 0000000..c757b85
Binary files /dev/null and b/icons/pluginIcons/nordlichtsepg.png differ
diff --git a/icons/pluginIcons/undelete.png b/icons/pluginIcons/undelete.png
new file mode 100644
index 0000000..8deeaa9
Binary files /dev/null and b/icons/pluginIcons/undelete.png differ
diff --git a/icons/pluginIcons/weatherng.png b/icons/pluginIcons/weatherng.png
new file mode 100644
index 0000000..542773b
Binary files /dev/null and b/icons/pluginIcons/weatherng.png differ
diff --git a/icons/skinIcons/Channelseparator.png b/icons/skinIcons/Channelseparator.png
index 906d35d..a1a091c 100644
Binary files a/icons/skinIcons/Channelseparator.png and b/icons/skinIcons/Channelseparator.png differ
diff --git a/icons/skinIcons/DiskUsage.png b/icons/skinIcons/DiskUsage.png
index f9f8a35..49de3be 100644
Binary files a/icons/skinIcons/DiskUsage.png and b/icons/skinIcons/DiskUsage.png differ
diff --git a/icons/skinIcons/arrowLeftChannelSep.png b/icons/skinIcons/arrowLeftChannelSep.png
new file mode 100644
index 0000000..85e456c
Binary files /dev/null and b/icons/skinIcons/arrowLeftChannelSep.png differ
diff --git a/icons/skinIcons/arrowRightChannelSep.png b/icons/skinIcons/arrowRightChannelSep.png
new file mode 100644
index 0000000..d0d9825
Binary files /dev/null and b/icons/skinIcons/arrowRightChannelSep.png differ
diff --git a/icons/skinIcons/channeldelimiter.png b/icons/skinIcons/channeldelimiter.png
new file mode 100644
index 0000000..bb68db6
Binary files /dev/null and b/icons/skinIcons/channeldelimiter.png differ
diff --git a/icons/skinIcons/crypted.png b/icons/skinIcons/crypted.png
new file mode 100644
index 0000000..930ca26
Binary files /dev/null and b/icons/skinIcons/crypted.png differ
diff --git a/icons/skinIcons/daydelimiter.png b/icons/skinIcons/daydelimiter.png
index 85e2640..0f46eb7 100644
Binary files a/icons/skinIcons/daydelimiter.png and b/icons/skinIcons/daydelimiter.png differ
diff --git a/icons/skinIcons/defaultPoster.png b/icons/skinIcons/defaultPoster.png
new file mode 100644
index 0000000..2e889ad
Binary files /dev/null and b/icons/skinIcons/defaultPoster.png differ
diff --git a/icons/skinIcons/discpercent.png b/icons/skinIcons/discpercent.png
index 1c219c5..949fbc7 100644
Binary files a/icons/skinIcons/discpercent.png and b/icons/skinIcons/discpercent.png differ
diff --git a/icons/skinIcons/dolbyoff.png b/icons/skinIcons/dolbyoff.png
new file mode 100644
index 0000000..bc9990b
Binary files /dev/null and b/icons/skinIcons/dolbyoff.png differ
diff --git a/icons/skinIcons/dolbyon.png b/icons/skinIcons/dolbyon.png
new file mode 100644
index 0000000..a00cc43
Binary files /dev/null and b/icons/skinIcons/dolbyon.png differ
diff --git a/icons/skinIcons/fta.png b/icons/skinIcons/fta.png
new file mode 100644
index 0000000..010b128
Binary files /dev/null and b/icons/skinIcons/fta.png differ
diff --git a/icons/skinIcons/fwd.png b/icons/skinIcons/fwd.png
index 13b4751..9f6dd48 100644
Binary files a/icons/skinIcons/fwd.png and b/icons/skinIcons/fwd.png differ
diff --git a/icons/skinIcons/fwdInactive.png b/icons/skinIcons/fwdInactive.png
index 0092440..185d579 100644
Binary files a/icons/skinIcons/fwdInactive.png and b/icons/skinIcons/fwdInactive.png differ
diff --git a/icons/skinIcons/fwdx1.png b/icons/skinIcons/fwdx1.png
new file mode 100644
index 0000000..93caa61
Binary files /dev/null and b/icons/skinIcons/fwdx1.png differ
diff --git a/icons/skinIcons/fwdx2.png b/icons/skinIcons/fwdx2.png
new file mode 100644
index 0000000..dc39d9f
Binary files /dev/null and b/icons/skinIcons/fwdx2.png differ
diff --git a/icons/skinIcons/fwdx3.png b/icons/skinIcons/fwdx3.png
new file mode 100644
index 0000000..89ae796
Binary files /dev/null and b/icons/skinIcons/fwdx3.png differ
diff --git a/icons/skinIcons/hd1080i.png b/icons/skinIcons/hd1080i.png
index 21351ce..b3e2bc6 100644
Binary files a/icons/skinIcons/hd1080i.png and b/icons/skinIcons/hd1080i.png differ
diff --git a/icons/skinIcons/hd1080i_rec.png b/icons/skinIcons/hd1080i_rec.png
new file mode 100644
index 0000000..b3e2bc6
Binary files /dev/null and b/icons/skinIcons/hd1080i_rec.png differ
diff --git a/icons/skinIcons/hd720p.png b/icons/skinIcons/hd720p.png
index 1d91b7d..0a6024d 100644
Binary files a/icons/skinIcons/hd720p.png and b/icons/skinIcons/hd720p.png differ
diff --git a/icons/skinIcons/hd720p_rec.png b/icons/skinIcons/hd720p_rec.png
new file mode 100644
index 0000000..0a6024d
Binary files /dev/null and b/icons/skinIcons/hd720p_rec.png differ
diff --git a/icons/skinIcons/pause.png b/icons/skinIcons/pause.png
index e6577cf..f2977e1 100644
Binary files a/icons/skinIcons/pause.png and b/icons/skinIcons/pause.png differ
diff --git a/icons/skinIcons/pauseInactive.png b/icons/skinIcons/pauseInactive.png
index 602e556..fc1a34a 100644
Binary files a/icons/skinIcons/pauseInactive.png and b/icons/skinIcons/pauseInactive.png differ
diff --git a/icons/skinIcons/play.png b/icons/skinIcons/play.png
index b0c8a18..2eebf44 100644
Binary files a/icons/skinIcons/play.png and b/icons/skinIcons/play.png differ
diff --git a/icons/skinIcons/playInactive.png b/icons/skinIcons/playInactive.png
index 9612cb0..11134b9 100644
Binary files a/icons/skinIcons/playInactive.png and b/icons/skinIcons/playInactive.png differ
diff --git a/icons/skinIcons/radio.png b/icons/skinIcons/radio.png
index 3a90a3e..9e9bedd 100644
Binary files a/icons/skinIcons/radio.png and b/icons/skinIcons/radio.png differ
diff --git a/icons/skinIcons/recfolder.png b/icons/skinIcons/recfolder.png
new file mode 100644
index 0000000..90ab8de
Binary files /dev/null and b/icons/skinIcons/recfolder.png differ
diff --git a/icons/skinIcons/recoff.png b/icons/skinIcons/recoff.png
new file mode 100644
index 0000000..ed88cc5
Binary files /dev/null and b/icons/skinIcons/recoff.png differ
diff --git a/icons/skinIcons/recon.png b/icons/skinIcons/recon.png
new file mode 100644
index 0000000..33f9e73
Binary files /dev/null and b/icons/skinIcons/recon.png differ
diff --git a/icons/skinIcons/rew.png b/icons/skinIcons/rew.png
index 7055823..4ef6241 100644
Binary files a/icons/skinIcons/rew.png and b/icons/skinIcons/rew.png differ
diff --git a/icons/skinIcons/rewInactive.png b/icons/skinIcons/rewInactive.png
index 1ad9d6d..4935e97 100644
Binary files a/icons/skinIcons/rewInactive.png and b/icons/skinIcons/rewInactive.png differ
diff --git a/icons/skinIcons/rewx1.png b/icons/skinIcons/rewx1.png
new file mode 100644
index 0000000..dde466f
Binary files /dev/null and b/icons/skinIcons/rewx1.png differ
diff --git a/icons/skinIcons/rewx2.png b/icons/skinIcons/rewx2.png
new file mode 100644
index 0000000..fede1b5
Binary files /dev/null and b/icons/skinIcons/rewx2.png differ
diff --git a/icons/skinIcons/rewx3.png b/icons/skinIcons/rewx3.png
new file mode 100644
index 0000000..db43c59
Binary files /dev/null and b/icons/skinIcons/rewx3.png differ
diff --git a/icons/skinIcons/sd576i.png b/icons/skinIcons/sd576i.png
index 85c3657..4147ce9 100644
Binary files a/icons/skinIcons/sd576i.png and b/icons/skinIcons/sd576i.png differ
diff --git a/icons/skinIcons/sd576i_rec.png b/icons/skinIcons/sd576i_rec.png
new file mode 100644
index 0000000..4147ce9
Binary files /dev/null and b/icons/skinIcons/sd576i_rec.png differ
diff --git a/icons/skinIcons/stereooff.png b/icons/skinIcons/stereooff.png
new file mode 100644
index 0000000..368c62d
Binary files /dev/null and b/icons/skinIcons/stereooff.png differ
diff --git a/icons/skinIcons/stereoon.png b/icons/skinIcons/stereoon.png
new file mode 100644
index 0000000..ef6c7d2
Binary files /dev/null and b/icons/skinIcons/stereoon.png differ
diff --git a/icons/skinIcons/timerRecording.png b/icons/skinIcons/timerRecording.png
index 3f253fb..916c45e 100644
Binary files a/icons/skinIcons/timerRecording.png and b/icons/skinIcons/timerRecording.png differ
diff --git a/icons/skinIcons/tracks.png b/icons/skinIcons/tracks.png
index cf19b7e..d105956 100644
Binary files a/icons/skinIcons/tracks.png and b/icons/skinIcons/tracks.png differ
diff --git a/icons/skinIcons/txtoff.png b/icons/skinIcons/txtoff.png
new file mode 100644
index 0000000..8644d43
Binary files /dev/null and b/icons/skinIcons/txtoff.png differ
diff --git a/icons/skinIcons/txton.png b/icons/skinIcons/txton.png
new file mode 100644
index 0000000..3c6abd2
Binary files /dev/null and b/icons/skinIcons/txton.png differ
diff --git a/icons/skinIcons/vdrlogo.png b/icons/skinIcons/vdrlogo.png
index 44c7896..7fff397 100644
Binary files a/icons/skinIcons/vdrlogo.png and b/icons/skinIcons/vdrlogo.png differ
diff --git a/imagecache.c b/imagecache.c
new file mode 100644
index 0000000..29690c3
--- /dev/null
+++ b/imagecache.c
@@ -0,0 +1,679 @@
+#include <string>
+#include <sstream>
+#include <map>
+#include "imagecache.h"
+#include "config.h"
+#include "helpers.h"
+
+using namespace Magick;
+
+cImageCache::cImageCache() : cImageMagickWrapper() {
+ tempStaticLogo = NULL;
+ osdTheme = Setup.OSDTheme;
+}
+
+cImageCache::~cImageCache() {
+ Clear();
+ if (tempStaticLogo) {
+ delete tempStaticLogo;
+ tempStaticLogo = NULL;
+ }
+}
+
+void cImageCache::CreateCache(void) {
+ //Menu Icons
+ std::vector<std::pair<std::string, cPoint> > menuIcons = GetMenuIcons();
+ for (int i=0; i < menuIcons.size(); i++) {
+ std::string iconName = menuIcons[i].first;
+ cPoint iconSize = menuIcons[i].second;
+ bool success = LoadIcon(ctMenuIcon, iconName);
+ if (success)
+ InsertIntoIconCache(ctMenuIcon, iconName, iconSize.X(), iconSize.X());
+ }
+ //Skin Icons
+ std::vector<std::pair<std::string, sImgProperties> > skinIcons = GetSkinIcons();
+ for (int i=0; i < skinIcons.size(); i++) {
+ std::string iconName = skinIcons[i].first;
+ sImgProperties iconProps = skinIcons[i].second;
+ bool success = LoadIcon(ctSkinIcon, iconName);
+ if (success)
+ InsertIntoIconCache(ctSkinIcon, iconName, iconProps.width, iconProps.height, iconProps.preserveAspect);
+
+ }
+ //Channel Logos
+ if (config.GetValue("numLogosInitial") > 0) {
+ int channelsCached = 0;
+ for (const cChannel *channel = Channels.First(); channel; channel = Channels.Next(channel)) {
+ if (channelsCached >= config.GetValue("numLogosInitial"))
+ break;
+ if (!channel->GroupSep()) {
+ bool success = LoadLogo(channel);
+ if (success) {
+ channelsCached++;
+ InsertIntoLogoCache(ctLogo, *channel->GetChannelID().ToString());
+ InsertIntoLogoCache(ctLogoMenuItem, *channel->GetChannelID().ToString());
+ }
+ }
+
+ }
+ }
+}
+
+void cImageCache::CreateCacheDelayed(void) {
+ if (config.GetValue("displayType") == dtBlending)
+ CreateSkinElementsBlended();
+ else if (config.GetValue("displayType") == dtGraphical)
+ CreateSkinElementsGraphics();
+}
+
+bool cImageCache::ThemeChanged(void) {
+ if (osdTheme.compare(Setup.OSDTheme) != 0) {
+ osdTheme = Setup.OSDTheme;
+ return true;
+ }
+ return false;
+}
+
+void cImageCache::Reload(void) {
+ Clear();
+ CreateCache();
+ CreateCacheDelayed();
+}
+
+cImage *cImageCache::GetMenuIcon(std::string name) {
+ std::map<std::string, cImage*>::iterator hit = menuIconCache.find(name);
+ if (hit != menuIconCache.end()) {
+ return (cImage*)hit->second;
+ } else {
+ int iconWidth = geoManager->menuMainMenuIconSize;
+ int iconHeight = geoManager->menuMainMenuIconSize;
+ bool success = LoadIcon(ctMenuIcon, name);
+ if (success) {
+ InsertIntoIconCache(ctMenuIcon, name, iconWidth, iconHeight);
+ hit = menuIconCache.find(name);
+ if (hit != menuIconCache.end()) {
+ return (cImage*)hit->second;
+ }
+ }
+ }
+ return NULL;
+}
+
+cImage *cImageCache::GetSkinIcon(std::string name, int width, int height, bool preserveAspect) {
+ std::map<std::string, cImage*>::iterator hit = skinIconCache.find(name);
+ if (hit != skinIconCache.end()) {
+ return (cImage*)hit->second;
+ } else {
+ bool success = LoadIcon(ctSkinIcon, name);
+ if (success) {
+ InsertIntoIconCache(ctSkinIcon, name, width, height, preserveAspect);
+ hit = skinIconCache.find(name);
+ if (hit != skinIconCache.end()) {
+ return (cImage*)hit->second;
+ }
+ }
+ }
+ return NULL;
+}
+
+cImage *cImageCache::GetSkinElement(eSkinElementType type) {
+ std::map<eSkinElementType, cImage*>::iterator hit = skinElementCache.find(type);
+ if (hit != skinElementCache.end()) {
+ return (cImage*)hit->second;
+ }
+ return NULL;
+}
+
+cImage *cImageCache::GetLogo(eCacheType type, const cChannel *channel) {
+ if (!channel)
+ return NULL;
+
+ std::map<std::string, cImage*> *cache;
+ if (type == ctLogo)
+ cache = &logoCache;
+ else if (type == ctLogoMenuItem)
+ cache = &logoMenuItemCache;
+ else if (type == ctLogoTimer)
+ cache = &logoTimerCache;
+
+ std::map<std::string, cImage*>::iterator hit = cache->find(*channel->GetChannelID().ToString());
+
+ if (hit != cache->end()) {
+ return (cImage*)hit->second;
+ } else {
+ bool success = LoadLogo(channel);
+ if (success) {
+ if (config.GetValue("limitLogoCache") && (cache->size() >= config.GetValue("numLogosMax"))) {
+ //logo cache is full, don't cache anymore
+ cPoint logoSize = LogoSize(type);
+ int width = logoSize.X();
+ int height = logoSize.Y();
+ if (tempStaticLogo) {
+ delete tempStaticLogo;
+ tempStaticLogo = NULL;
+ }
+ tempStaticLogo = CreateImage(width, height);
+ return tempStaticLogo;
+ } else {
+ //add requested logo to cache
+ InsertIntoLogoCache(type, *channel->GetChannelID().ToString());
+ hit = cache->find(*channel->GetChannelID().ToString());
+ if (hit != cache->end()) {
+ return (cImage*)hit->second;
+ }
+ }
+ }
+ }
+ return NULL;
+}
+
+cImage cImageCache::GetBackground(tColor back, tColor blend, int width, int height, bool flip) {
+ if (!flip)
+ CreateBackground(back, blend, width, height);
+ else
+ CreateBackgroundReverse(back, blend, width, height);
+ return CreateImageCopy();
+}
+
+std::string cImageCache::GetCacheSize(eCacheType type) {
+ std::stringstream result;
+ int sizeByte = 0;
+ int numImages = 0;
+ if ((type == ctMenuIcon) || (type == ctSkinIcon)) {
+ std::map<std::string, cImage*> *cache;
+ if (type == ctMenuIcon)
+ cache = &menuIconCache;
+ else if (type == ctSkinIcon)
+ cache = &skinIconCache;
+
+ for(std::map<std::string, cImage*>::const_iterator it = cache->begin(); it != cache->end(); it++) {
+ cImage *img = (cImage*)it->second;
+ sizeByte += img->Width() * img->Height() * sizeof(tColor);
+ }
+ numImages = cache->size();
+ } else if ((type == ctLogo) || (type == ctLogoMenuItem) || (type == ctLogoTimer)) {
+ std::map<std::string, cImage*> *cache;
+ if (type == ctLogo)
+ cache = &logoCache;
+ else if (type == ctLogoMenuItem)
+ cache = &logoMenuItemCache;
+ else if (type == ctLogoTimer)
+ cache = &logoTimerCache;
+
+ for(std::map<std::string, cImage*>::const_iterator it = cache->begin(); it != cache->end(); it++) {
+ cImage *img = (cImage*)it->second;
+ sizeByte += img->Width() * img->Height() * sizeof(tColor);
+ }
+ numImages = cache->size();
+ } else if (type == ctSkinElement) {
+ for(std::map<eSkinElementType, cImage*>::const_iterator it = skinElementCache.begin(); it != skinElementCache.end(); it++) {
+ cImage *img = (cImage*)it->second;
+ sizeByte += img->Width() * img->Height() * sizeof(tColor);
+ }
+ numImages = skinElementCache.size();
+ }
+
+ result << numImages << " " << tr("images") << " / " << sizeByte/1024 << " KByte";
+ return result.str();
+}
+
+std::vector<std::pair<std::string, cPoint> > cImageCache::GetMenuIcons(void) {
+ std::vector<std::pair<std::string, cPoint> > menuIcons;
+ //MainMenuIcons
+ std::vector<std::string> mainMenuIcons;
+ mainMenuIcons.push_back("menuIcons/Schedule");
+ mainMenuIcons.push_back("menuIcons/Channels");
+ mainMenuIcons.push_back("menuIcons/Timers");
+ mainMenuIcons.push_back("menuIcons/Recordings");
+ mainMenuIcons.push_back("menuIcons/Setup");
+ mainMenuIcons.push_back("menuIcons/Commands");
+ mainMenuIcons.push_back("menuIcons/OSD");
+ mainMenuIcons.push_back("menuIcons/EPG");
+ mainMenuIcons.push_back("menuIcons/DVB");
+ mainMenuIcons.push_back("menuIcons/LNB");
+ mainMenuIcons.push_back("menuIcons/CAM");
+ mainMenuIcons.push_back("menuIcons/Recording");
+ mainMenuIcons.push_back("menuIcons/Replay");
+ mainMenuIcons.push_back("menuIcons/Miscellaneous");
+ mainMenuIcons.push_back("menuIcons/Plugins");
+ mainMenuIcons.push_back("menuIcons/Restart");
+ int mainMenuIconSize = geoManager->menuMainMenuIconSize;
+ for (int i=0; i<mainMenuIcons.size(); i++) {
+ menuIcons.push_back(std::pair<std::string, cPoint>(mainMenuIcons[i], cPoint(mainMenuIconSize, mainMenuIconSize)));
+ }
+
+ //Plugin Icons
+ for (int i = 0; ; i++) {
+ cPlugin *p = cPluginManager::GetPlugin(i);
+ if (p) {
+ std::stringstream iconPlugin;
+ iconPlugin << "pluginIcons/" << p->Name();
+ menuIcons.push_back(std::pair<std::string, cPoint>(iconPlugin.str(), cPoint(mainMenuIconSize, mainMenuIconSize)));
+ } else
+ break;
+ }
+ return menuIcons;
+}
+
+std::vector<std::pair<std::string, sImgProperties> > cImageCache::GetSkinIcons(void) {
+ std::vector<std::pair<std::string, sImgProperties> > skinIcons;
+ //VDR Logo
+ sImgProperties props;
+ props.width = geoManager->menuHeaderVDRLogoWidth;
+ props.height = geoManager->menuHeaderHeight;
+ props.preserveAspect = true;
+ skinIcons.push_back(std::pair<std::string, sImgProperties>("skinIcons/vdrlogo", props));
+ //DiskUsage
+ int discUsageSize = geoManager->menuDiskUsageWidth;
+ props.width = props.height = discUsageSize*3/4;
+ props.preserveAspect = true;
+ skinIcons.push_back(std::pair<std::string, sImgProperties>("skinIcons/DiskUsage", props));
+ props.width = discUsageSize - 4;
+ props.height = discUsageSize/5;
+ props.preserveAspect = false;
+ skinIcons.push_back(std::pair<std::string, sImgProperties>("skinIcons/discpercent", props));
+ //menu header icons
+ std::vector<std::string> menuHeaderIcons;
+ menuHeaderIcons.push_back("menuIcons/Schedule");
+ menuHeaderIcons.push_back("menuIcons/Channels");
+ menuHeaderIcons.push_back("menuIcons/Timers");
+ menuHeaderIcons.push_back("menuIcons/Recordings");
+ menuHeaderIcons.push_back("menuIcons/Setup");
+ menuHeaderIcons.push_back("menuIcons/Commands");
+ props.width = geoManager->menuHeaderHeight-2;
+ props.height = geoManager->menuHeaderHeight-2;
+ props.preserveAspect = true;
+ for (int i=0; i<menuHeaderIcons.size(); i++) {
+ skinIcons.push_back(std::pair<std::string, sImgProperties>(menuHeaderIcons[i], props));
+ }
+
+ return skinIcons;
+}
+
+bool cImageCache::LoadIcon(eCacheType type, std::string name) {
+ bool success = false;
+ if (config.iconPathSet) {
+ cString iconPathTheme = cString::sprintf("%s%s/", *config.iconPath, Setup.OSDTheme);
+ success = LoadImage(name, *iconPathTheme, "png");
+ if (success) {
+ return true;
+ } else {
+ success = LoadImage(name, *config.iconPath, "png");
+ if (success) {
+ return true;
+ }
+ }
+ }
+ if (!success) {
+ cString iconPathTheme = cString::sprintf("%s%s/", *config.iconPathDefault, Setup.OSDTheme);
+ success = LoadImage(name, *iconPathTheme, "png");
+ if (success) {
+ return true;
+ } else {
+ success = LoadImage(name, *config.iconPathDefault, "png");
+ if (success) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+void cImageCache::InsertIntoIconCache(eCacheType type, std::string name, int width, int height, bool preserveAspect) {
+ cImage *image = CreateImage(width, height, preserveAspect);
+ if (type == ctMenuIcon)
+ menuIconCache.insert(std::pair<std::string, cImage*>(name, image));
+ else if (type == ctSkinIcon)
+ skinIconCache.insert(std::pair<std::string, cImage*>(name, image));
+}
+
+bool cImageCache::LoadLogo(const cChannel *channel) {
+ if (!channel)
+ return false;
+ std::string channelID = StrToLowerCase(*(channel->GetChannelID().ToString()));
+ std::string logoLower = StrToLowerCase(channel->Name());
+ bool success = false;
+ if (config.logoPathSet) {
+ cString logoThemePath = cString::sprintf("%s%s/", *config.logoPath, Setup.OSDTheme);
+ success = LoadImage(channelID.c_str(), *logoThemePath, *config.logoExtension);
+ if (success)
+ return true;
+ success = LoadImage(logoLower.c_str(), *logoThemePath, *config.logoExtension);
+ if (success)
+ return true;
+ success = LoadImage(channelID.c_str(), *config.logoPath, *config.logoExtension);
+ if (success)
+ return true;
+ success = LoadImage(logoLower.c_str(), *config.logoPath, *config.logoExtension);
+ if (success)
+ return true;
+ }
+ cString logoThemePath = cString::sprintf("%s%s/", *config.logoPathDefault, Setup.OSDTheme);
+ success = LoadImage(channelID.c_str(), *logoThemePath, *config.logoExtension);
+ if (success)
+ return true;
+ success = LoadImage(logoLower.c_str(), *logoThemePath, *config.logoExtension);
+ if (success)
+ return true;
+ success = LoadImage(channelID.c_str(), *config.logoPathDefault, *config.logoExtension);
+ if (success)
+ return true;
+ success = LoadImage(logoLower.c_str(), *config.logoPathDefault, *config.logoExtension);
+ if (success)
+ return true;
+
+ return false;
+}
+
+void cImageCache::InsertIntoLogoCache(eCacheType type, std::string channelID) {
+ cPoint logoSize = LogoSize(type);
+ int width = logoSize.X();
+ int height = logoSize.Y();
+ cImage *image = CreateImage(width, height);
+ if (type == ctLogo)
+ logoCache.insert(std::pair<std::string, cImage*>(channelID, image));
+ else if (type == ctLogoMenuItem)
+ logoMenuItemCache.insert(std::pair<std::string, cImage*>(channelID, image));
+ else if (type == ctLogoTimer)
+ logoTimerCache.insert(std::pair<std::string, cImage*>(channelID, image));
+}
+
+cPoint cImageCache::LogoSize(eCacheType type) {
+ int width, height;
+ switch (type) {
+ case ctLogo:
+ width = geoManager->channelLogoWidth;
+ height = geoManager->channelLogoHeight;
+ break;
+ case ctLogoMenuItem:
+ width = geoManager->menuLogoWidth;
+ height = geoManager->menuLogoHeight;
+ break;
+ case ctLogoTimer:
+ width = geoManager->menuTimersLogoWidth;
+ height = geoManager->menuTimersLogoHeight;
+ break;
+ default:
+ width = 1;
+ height = 1;
+ }
+ return cPoint(width, height);
+}
+
+void cImageCache::CreateSkinElementsBlended(void) {
+ //Default Menus
+ CreateBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), geoManager->menuItemWidthDefault-2, geoManager->menuItemHeightDefault-2);
+ InsertIntoSkinElementCache(seDefault);
+ CreateBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), geoManager->menuItemWidthDefault-2, geoManager->menuItemHeightDefault-2);
+ InsertIntoSkinElementCache(seDefaultHigh);
+
+ //Main Menu
+ CreateBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), geoManager->menuItemWidthMain-2, geoManager->menuItemHeightMain-2);
+ InsertIntoSkinElementCache(seMain);
+ CreateBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), geoManager->menuItemWidthMain-2, geoManager->menuItemHeightMain-2);
+ InsertIntoSkinElementCache(seMainHigh);
+
+ //Schedules Menu
+ CreateBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), geoManager->menuItemWidthSchedule-2, geoManager->menuItemHeightSchedule-2);
+ InsertIntoSkinElementCache(seSchedules);
+ CreateBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), geoManager->menuItemWidthSchedule-2, geoManager->menuItemHeightSchedule-2);
+ InsertIntoSkinElementCache(seSchedulesHigh);
+
+ //Channels Menu
+ CreateBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), geoManager->menuItemWidthChannel-2, geoManager->menuItemHeightSchedule-2);
+ InsertIntoSkinElementCache(seChannels);
+ CreateBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), geoManager->menuItemWidthChannel-2, geoManager->menuItemHeightSchedule-2);
+ InsertIntoSkinElementCache(seChannelsHigh);
+
+ //Recordings Menu
+ CreateBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), geoManager->menuItemWidthRecording-2, geoManager->menuItemHeightRecordings-2);
+ InsertIntoSkinElementCache(seRecordings);
+ CreateBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), geoManager->menuItemWidthRecording-2, geoManager->menuItemHeightRecordings-2);
+ InsertIntoSkinElementCache(seRecordingsHigh);
+
+ //Timers Menu
+ CreateBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), geoManager->menuItemWidthTimer-2, geoManager->menuItemHeightSchedule-2);
+ InsertIntoSkinElementCache(seTimers);
+ CreateBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), geoManager->menuItemWidthTimer-2, geoManager->menuItemHeightSchedule-2);
+ InsertIntoSkinElementCache(seTimersHigh);
+
+ //Setup Menu
+ CreateBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), geoManager->menuItemWidthSetup-2, geoManager->menuItemHeightMain-2);
+ InsertIntoSkinElementCache(seSetup);
+ CreateBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), geoManager->menuItemWidthSetup-2, geoManager->menuItemHeightMain-2);
+ InsertIntoSkinElementCache(seSetupHigh);
+
+ //DisplayTracks
+ CreateBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), geoManager->menuItemWidthTracks-2, geoManager->menuItemHeightTracks-2);
+ InsertIntoSkinElementCache(seTracks);
+ CreateBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), geoManager->menuItemWidthTracks-2, geoManager->menuItemHeightTracks-2);
+ InsertIntoSkinElementCache(seTracksHigh);
+
+ //Color Buttons
+ CreateBackground(Theme.Color(clrMenuBack), Theme.Color(clrButtonRed), geoManager->menuButtonWidth-4, geoManager->menuButtonHeight-4);
+ InsertIntoSkinElementCache(seButtonRed);
+ CreateBackground(Theme.Color(clrMenuBack), Theme.Color(clrButtonGreen), geoManager->menuButtonWidth-4, geoManager->menuButtonHeight-4);
+ InsertIntoSkinElementCache(seButtonGreen);
+ CreateBackground(Theme.Color(clrMenuBack), Theme.Color(clrButtonYellow), geoManager->menuButtonWidth-4, geoManager->menuButtonHeight-4);
+ InsertIntoSkinElementCache(seButtonYellow);
+ CreateBackground(Theme.Color(clrMenuBack), Theme.Color(clrButtonBlue), geoManager->menuButtonWidth-4, geoManager->menuButtonHeight-4);
+ InsertIntoSkinElementCache(seButtonBlue);
+
+ //Menu Header
+ bool mirrorHeader = (config.GetValue("menuAdjustLeft")) ? false : true;
+ CreateBackground(Theme.Color(clrMenuHeaderBlend), Theme.Color(clrMenuHeader), geoManager->osdWidth, geoManager->menuHeaderHeight, mirrorHeader);
+ InsertIntoSkinElementCache(seMenuHeader);
+
+ //ChannelLogo Background
+ std::string imgChannelLogoBack = "skinElements/channellogoback";
+ bool success = LoadIcon(ctSkinElement, imgChannelLogoBack);
+ if (success)
+ InsertIntoSkinElementCache(seChannelLogoBack, geoManager->channelLogoWidth, geoManager->channelLogoHeight);
+
+}
+
+void cImageCache::CreateSkinElementsGraphics(void) {
+ bool success = false;
+
+ //Default Menus
+ std::string imgDefaultMenuItem = "skinElements/menubuttondefault";
+ std::string imgDefaultMenuItemActive = "skinElements/menubuttondefaultactive";
+ success = LoadIcon(ctSkinElement, imgDefaultMenuItem);
+ if (success)
+ InsertIntoSkinElementCache(seDefault, geoManager->menuItemWidthDefault, geoManager->menuItemHeightDefault);
+ success = LoadIcon(ctSkinElement, imgDefaultMenuItemActive);
+ if (success)
+ InsertIntoSkinElementCache(seDefaultHigh, geoManager->menuItemWidthDefault, geoManager->menuItemHeightDefault);
+
+ std::string imgMenuItem = "skinElements/menubutton";
+ std::string imgMenuItemActive = "skinElements/menubuttonactive";
+ std::string imgMenuItemTop = "skinElements/menubuttontop";
+ //Main Menu + Setup Menu + Schedules Menu + Channels Menu + Recordings Menu + Timers Menu + Tracks Menu
+ success = LoadIcon(ctSkinElement, imgMenuItem);
+ if (success) {
+ InsertIntoSkinElementCache(seMain, geoManager->menuItemWidthMain, geoManager->menuItemHeightMain);
+ InsertIntoSkinElementCache(seSetup, geoManager->menuItemWidthSetup, geoManager->menuItemHeightMain);
+ InsertIntoSkinElementCache(seSchedules, geoManager->menuItemWidthSchedule, geoManager->menuItemHeightSchedule);
+ InsertIntoSkinElementCache(seChannels, geoManager->menuItemWidthChannel, geoManager->menuItemHeightSchedule);
+ InsertIntoSkinElementCache(seRecordings, geoManager->menuItemWidthRecording, geoManager->menuItemHeightRecordings);
+ InsertIntoSkinElementCache(seTimers, geoManager->menuItemWidthTimer, geoManager->menuItemHeightSchedule);
+ InsertIntoSkinElementCache(seTracks, geoManager->menuItemWidthTracks, geoManager->menuItemHeightTracks);
+ }
+ success = LoadIcon(ctSkinElement, imgMenuItemActive);
+ if (success) {
+ InsertIntoSkinElementCache(seMainHigh, geoManager->menuItemWidthMain, geoManager->menuItemHeightMain);
+ InsertIntoSkinElementCache(seSetupHigh, geoManager->menuItemWidthSetup, geoManager->menuItemHeightMain);
+ InsertIntoSkinElementCache(seSchedulesHigh, geoManager->menuItemWidthSchedule, geoManager->menuItemHeightSchedule);
+ InsertIntoSkinElementCache(seChannelsHigh, geoManager->menuItemWidthChannel, geoManager->menuItemHeightSchedule);
+ InsertIntoSkinElementCache(seRecordingsHigh, geoManager->menuItemWidthRecording, geoManager->menuItemHeightRecordings);
+ InsertIntoSkinElementCache(seTimersHigh, geoManager->menuItemWidthTimer, geoManager->menuItemHeightSchedule);
+ InsertIntoSkinElementCache(seTracksHigh, geoManager->menuItemWidthTracks, geoManager->menuItemHeightTracks);
+ }
+ success = LoadIcon(ctSkinElement, imgMenuItemTop);
+ if (success) {
+ InsertIntoSkinElementCache(seMainTop, geoManager->menuItemWidthMain, geoManager->menuItemHeightMain);
+ InsertIntoSkinElementCache(seSetupTop, geoManager->menuItemWidthSetup, geoManager->menuItemHeightMain);
+ InsertIntoSkinElementCache(seSchedulesTop, geoManager->menuItemWidthSchedule, geoManager->menuItemHeightSchedule);
+ InsertIntoSkinElementCache(seChannelsTop, geoManager->menuItemWidthChannel, geoManager->menuItemHeightSchedule);
+ InsertIntoSkinElementCache(seRecordingsTop, geoManager->menuItemWidthRecording, geoManager->menuItemHeightRecordings);
+ InsertIntoSkinElementCache(seTimersTop, geoManager->menuItemWidthTimer, geoManager->menuItemHeightSchedule);
+ InsertIntoSkinElementCache(seTracksTop, geoManager->menuItemWidthTracks, geoManager->menuItemHeightTracks);
+ }
+
+ //Color Buttons
+ std::string imgButtonRed = "skinElements/buttonred";
+ std::string imgButtonGreen = "skinElements/buttongreen";
+ std::string imgButtonYellow = "skinElements/buttonyellow";
+ std::string imgButtonBlue = "skinElements/buttonblue";
+ success = LoadIcon(ctSkinElement, imgButtonRed);
+ if (success)
+ InsertIntoSkinElementCache(seButtonRed, geoManager->menuButtonWidth, geoManager->menuButtonHeight);
+ success = LoadIcon(ctSkinElement, imgButtonGreen);
+ if (success)
+ InsertIntoSkinElementCache(seButtonGreen, geoManager->menuButtonWidth, geoManager->menuButtonHeight);
+ success = LoadIcon(ctSkinElement, imgButtonYellow);
+ if (success)
+ InsertIntoSkinElementCache(seButtonYellow, geoManager->menuButtonWidth, geoManager->menuButtonHeight);
+ success = LoadIcon(ctSkinElement, imgButtonBlue);
+ if (success)
+ InsertIntoSkinElementCache(seButtonBlue, geoManager->menuButtonWidth, geoManager->menuButtonHeight);
+
+ //Menu Header
+ bool mirrorHeader = (config.GetValue("menuAdjustLeft")) ? false : true;
+ std::string imgHeaderTop, imgHeaderBack;
+ if (!mirrorHeader) {
+ imgHeaderTop = "skinElements/headertop";
+ imgHeaderBack = "skinElements/headerback";
+ } else {
+ imgHeaderTop = "skinElements/header_mirroredtop";
+ imgHeaderBack = "skinElements/header_mirroredback";
+ }
+ success = LoadIcon(ctSkinElement, imgHeaderTop);
+ if (success)
+ InsertIntoSkinElementCache(seMenuHeaderTop, geoManager->osdWidth, geoManager->menuHeaderHeight);
+ success = LoadIcon(ctSkinElement, imgHeaderBack);
+ if (success)
+ InsertIntoSkinElementCache(seMenuHeader, geoManager->osdWidth, geoManager->menuHeaderHeight);
+
+ //Messages Background + Menu Messages Background
+ std::string msgStatus = "skinElements/messageStatus";
+ std::string msgInfo = "skinElements/messageInfo";
+ std::string msgWarning = "skinElements/messageWarning";
+ std::string msgError = "skinElements/messageError";
+ success = LoadIcon(ctSkinElement, msgStatus);
+ if (success) {
+ InsertIntoSkinElementCache(seMessageStatus, geoManager->messageWidth, geoManager->messageHeight);
+ InsertIntoSkinElementCache(seMessageMenuStatus, geoManager->menuMessageWidth, geoManager->menuMessageHeight);
+ }
+ success = LoadIcon(ctSkinElement, msgInfo);
+ if (success) {
+ InsertIntoSkinElementCache(seMessageInfo, geoManager->messageWidth, geoManager->messageHeight);
+ InsertIntoSkinElementCache(seMessageMenuInfo, geoManager->menuMessageWidth, geoManager->menuMessageHeight);
+ }
+ success = LoadIcon(ctSkinElement, msgWarning);
+ if (success) {
+ InsertIntoSkinElementCache(seMessageWarning, geoManager->messageWidth, geoManager->messageHeight);
+ InsertIntoSkinElementCache(seMessageMenuWarning, geoManager->menuMessageWidth, geoManager->menuMessageHeight);
+ }
+ success = LoadIcon(ctSkinElement, msgError);
+ if (success) {
+ InsertIntoSkinElementCache(seMessageError, geoManager->messageWidth, geoManager->messageHeight);
+ InsertIntoSkinElementCache(seMessageMenuError, geoManager->menuMessageWidth, geoManager->menuMessageHeight);
+ }
+
+ //DisplayChannel Background and Foreground
+ std::string imgChannelBackground;
+ std::string imgChannelTop;
+ switch (config.GetValue("logoPosition")) {
+ case lpLeft:
+ imgChannelBackground = "skinElements/displaychannelback";
+ imgChannelTop = "skinElements/displaychanneltop";
+ break;
+ case lpRight:
+ imgChannelBackground = "skinElements/displaychannelback_right";
+ imgChannelTop = "skinElements/displaychanneltop_right";
+ break;
+ case lpNone:
+ imgChannelBackground = "skinElements/displayreplayback";
+ imgChannelTop = "skinElements/displayreplaytop";
+ break;
+ }
+ success = LoadIcon(ctSkinElement, imgChannelBackground);
+ if (success)
+ InsertIntoSkinElementCache(seChannelBackground, geoManager->channelWidth, geoManager->channelHeight);
+
+ success = LoadIcon(ctSkinElement, imgChannelTop);
+ if (success)
+ InsertIntoSkinElementCache(seChannelTop, geoManager->channelWidth, geoManager->channelHeight);
+
+ //ChannelLogo Background
+ std::string imgChannelLogoBack = "skinElements/channellogoback";
+ success = LoadIcon(ctSkinElement, imgChannelLogoBack);
+ if (success)
+ InsertIntoSkinElementCache(seChannelLogoBack, geoManager->channelLogoWidth, geoManager->channelLogoHeight);
+
+ //DisplayReplay Background and Foreground
+ std::string imgReplayBackground = "skinElements/displayreplayback";
+ success = LoadIcon(ctSkinElement, imgReplayBackground);
+ if (success)
+ InsertIntoSkinElementCache(seReplayBackground, geoManager->replayWidth, geoManager->replayHeight);
+ std::string imgReplayTop = "skinElements/displayreplaytop";
+ success = LoadIcon(ctSkinElement, imgReplayTop);
+ if (success)
+ InsertIntoSkinElementCache(seReplayTop, geoManager->replayWidth, geoManager->replayHeight);
+
+ //DisplayVolume Background
+ std::string imgVolumeBackground = "skinElements/displayvolume";
+ success = LoadIcon(ctSkinElement, imgVolumeBackground);
+ if (success)
+ InsertIntoSkinElementCache(seVolumeBackground, geoManager->volumeWidth, geoManager->volumeHeight);
+
+ //Scrolllbar
+ std::string imgScrollbar = "skinElements/scrollbar";
+ success = LoadIcon(ctSkinElement, imgScrollbar);
+ if (success)
+ InsertIntoSkinElementCache(seScrollbar, geoManager->menuWidthScrollbar, geoManager->menuContentHeight - 2 * geoManager->menuSpace);
+}
+
+void cImageCache::InsertIntoSkinElementCache(eSkinElementType type, int width, int height) {
+ cImage *image = CreateImage(width, height, false);
+ skinElementCache.insert(std::pair<eSkinElementType, cImage*>(type, image));
+}
+
+void cImageCache::Clear(void) {
+ for(std::map<std::string, cImage*>::const_iterator it = menuIconCache.begin(); it != menuIconCache.end(); it++) {
+ cImage *img = (cImage*)it->second;
+ delete img;
+ }
+ menuIconCache.clear();
+
+ for(std::map<std::string, cImage*>::const_iterator it = skinIconCache.begin(); it != skinIconCache.end(); it++) {
+ cImage *img = (cImage*)it->second;
+ delete img;
+ }
+ skinIconCache.clear();
+
+ for(std::map<eSkinElementType, cImage*>::const_iterator it = skinElementCache.begin(); it != skinElementCache.end(); it++) {
+ cImage *img = (cImage*)it->second;
+ delete img;
+ }
+ skinElementCache.clear();
+
+ for(std::map<std::string, cImage*>::const_iterator it = logoCache.begin(); it != logoCache.end(); it++) {
+ cImage *img = (cImage*)it->second;
+ delete img;
+ }
+ logoCache.clear();
+
+ for(std::map<std::string, cImage*>::const_iterator it = logoMenuItemCache.begin(); it != logoMenuItemCache.end(); it++) {
+ cImage *img = (cImage*)it->second;
+ delete img;
+ }
+ logoMenuItemCache.clear();
+
+ for(std::map<std::string, cImage*>::const_iterator it = logoTimerCache.begin(); it != logoTimerCache.end(); it++) {
+ cImage *img = (cImage*)it->second;
+ delete img;
+ }
+ logoTimerCache.clear();
+}
diff --git a/imagecache.h b/imagecache.h
new file mode 100644
index 0000000..54a106d
--- /dev/null
+++ b/imagecache.h
@@ -0,0 +1,113 @@
+#ifndef __NOPACITY_IMAGECACHE_H
+#define __NOPACITY_IMAGECACHE_H
+
+#define X_DISPLAY_MISSING
+
+#include <vdr/osd.h>
+#include <vdr/skins.h>
+#include <Magick++.h>
+#include <vector>
+#include "imagemagickwrapper.h"
+
+using namespace Magick;
+
+enum eCacheType {
+ ctMenuIcon = 0,
+ ctSkinIcon,
+ ctLogo,
+ ctLogoMenuItem,
+ ctLogoTimer,
+ ctSkinElement,
+};
+
+enum eSkinElementType {
+ seNone = -1,
+ seDefault = 0,
+ seDefaultHigh,
+ seMain,
+ seMainHigh,
+ seMainTop,
+ seSchedules,
+ seSchedulesHigh,
+ seSchedulesTop,
+ seChannels,
+ seChannelsHigh,
+ seChannelsTop,
+ seRecordings,
+ seRecordingsHigh,
+ seRecordingsTop,
+ seTimers,
+ seTimersHigh,
+ seTimersTop,
+ seSetup,
+ seSetupHigh,
+ seSetupTop,
+ seTracks,
+ seTracksHigh,
+ seTracksTop,
+ seButtonRed,
+ seButtonGreen,
+ seButtonYellow,
+ seButtonBlue,
+ seMenuHeader,
+ seMenuHeaderTop,
+ seChannelBackground,
+ seChannelTop,
+ seChannelLogoBack,
+ seReplayBackground,
+ seReplayTop,
+ seMessageStatus,
+ seMessageInfo,
+ seMessageWarning,
+ seMessageError,
+ seMessageMenuStatus,
+ seMessageMenuInfo,
+ seMessageMenuWarning,
+ seMessageMenuError,
+ seVolumeBackground,
+ seScrollbar,
+};
+
+struct sImgProperties {
+ int width;
+ int height;
+ bool preserveAspect;
+};
+
+class cImageCache : public cImageMagickWrapper {
+public:
+ cImageCache();
+ ~cImageCache();
+ void CreateCache(void);
+ void CreateCacheDelayed(void);
+ void Reload(void);
+ bool ThemeChanged(void);
+ cImage *GetMenuIcon(std::string name);
+ cImage *GetSkinIcon(std::string name, int width=0, int height=0, bool preserveAspect = true);
+ cImage *GetSkinElement(eSkinElementType type);
+ cImage *GetLogo(eCacheType type, const cChannel *channel);
+ cImage GetBackground(tColor back, tColor blend, int width, int height, bool flip = false);
+ std::string GetCacheSize(eCacheType type);
+private:
+ cImage *tempStaticLogo;
+ std::string osdTheme;
+ std::map<std::string, cImage*> menuIconCache;
+ std::map<std::string, cImage*> skinIconCache;
+ std::map<eSkinElementType, cImage*> skinElementCache;
+ std::map<std::string, cImage*> logoCache;
+ std::map<std::string, cImage*> logoMenuItemCache;
+ std::map<std::string, cImage*> logoTimerCache;
+ std::vector<std::pair<std::string, cPoint> > GetMenuIcons(void);
+ std::vector<std::pair<std::string, sImgProperties> > GetSkinIcons(void);
+ bool LoadIcon(eCacheType type, std::string name);
+ void InsertIntoIconCache(eCacheType type, std::string name, int width, int height, bool preserveAspect = true);
+ bool LoadLogo(const cChannel *channel);
+ void InsertIntoLogoCache(eCacheType type, std::string channelID);
+ cPoint LogoSize(eCacheType type);
+ void CreateSkinElementsBlended(void);
+ void CreateSkinElementsGraphics(void);
+ void InsertIntoSkinElementCache(eSkinElementType type, int width=0, int height=0);
+ void Clear(void);
+};
+
+#endif //__NOPACITY_IMAGECACHE_H
diff --git a/imageloader.c b/imageloader.c
index bfc4ce5..1ab4a1b 100644
--- a/imageloader.c
+++ b/imageloader.c
@@ -1,3 +1,5 @@
+#include "config.h"
+#include "helpers.h"
#include "imageloader.h"
#include <math.h>
#include <string>
@@ -6,24 +8,34 @@
using namespace Magick;
-cImageLoader::cImageLoader() {
- InitializeMagick(NULL);
+cImageLoader::cImageLoader() : cImageMagickWrapper() {
}
cImageLoader::~cImageLoader() {
}
-bool cImageLoader::LoadLogo(const char *logo, int width = config.logoWidth, int height = config.logoHeight) {
+cImage cImageLoader::GetImage() {
+ return CreateImageCopy();
+}
+
+bool cImageLoader::LoadLogo(const char *logo, int width, int height ) {
if ((width == 0)||(height==0))
return false;
- std::string logoLower = logo;
- toLowerCase(logoLower);
+ std::string logoLower = StrToLowerCase(logo);
bool success = false;
if (config.logoPathSet) {
- success = LoadImage(logoLower.c_str(), config.logoPath, config.logoExtension);
+ //theme dependend logo
+ cString logoPath = cString::sprintf("%s%s/", *config.logoPath, Setup.OSDTheme);
+ success = LoadImage(logoLower.c_str(), *logoPath, *config.logoExtension);
+ if (!success)
+ success = LoadImage(logoLower.c_str(), *config.logoPath, *config.logoExtension);
}
if (!success) {
- success = LoadImage(logoLower.c_str(), config.logoPathDefault, config.logoExtension);
+ //theme dependend logo
+ cString logoPath = cString::sprintf("%s%s/", *config.logoPathDefault, Setup.OSDTheme);
+ success = LoadImage(logoLower.c_str(), *logoPath, *config.logoExtension);
+ if (!success)
+ success = LoadImage(logoLower.c_str(), *config.logoPathDefault, *config.logoExtension);
}
if (!success)
return false;
@@ -33,75 +45,23 @@ bool cImageLoader::LoadLogo(const char *logo, int width = config.logoWidth, int
return true;
}
-bool cImageLoader::LoadIcon(const char *cIcon, int size) {
- if (size==0)
- return false;
- bool success = false;
- if (config.iconPathSet) {
- cString iconThemePath = cString::sprintf("%s%s/", *config.iconPath, Setup.OSDTheme);
- success = LoadImage(cString(cIcon), iconThemePath, "png");
- if (!success) {
- success = LoadImage(cString(cIcon), config.iconPath, "png");
- }
- }
- if (!success) {
- cString iconThemePath = cString::sprintf("%s%s/", *config.iconPathDefault, Setup.OSDTheme);
- success = LoadImage(cString(cIcon), iconThemePath, "png");
- if (!success) {
- success = LoadImage(cString(cIcon), config.iconPathDefault, "png");
- }
- }
- if (!success)
- return false;
- buffer.sample(Geometry(size, size));
- return true;
-}
-
-bool cImageLoader::LoadIcon(const char *cIcon, int width, int height, bool preserveAspect) {
- try {
+bool cImageLoader::LoadEPGImage(int eventID) {
+ int width = config.GetValue("epgImageWidth");
+ int height = config.GetValue("epgImageHeight");
if ((width == 0)||(height==0))
return false;
bool success = false;
- if (config.iconPathSet) {
- cString iconThemePath = cString::sprintf("%s%s/", *config.iconPath, Setup.OSDTheme);
- success = LoadImage(cString(cIcon), iconThemePath, "png");
- if (!success) {
- success = LoadImage(cString(cIcon), config.iconPath, "png");
- }
+ if (config.epgImagePathSet) {
+ success = LoadImage(*cString::sprintf("%d", eventID), *config.epgImagePath, "jpg");
}
if (!success) {
- cString iconThemePath = cString::sprintf("%s%s/", *config.iconPathDefault, Setup.OSDTheme);
- success = LoadImage(cString(cIcon), iconThemePath, "png");
- if (!success) {
- success = LoadImage(cString(cIcon), config.iconPathDefault, "png");
- }
+ success = LoadImage(*cString::sprintf("%d", eventID), *config.epgImagePathDefault, "jpg");
}
- if (!success)
- return false;
- if (preserveAspect) {
- buffer.sample(Geometry(width, height));
- } else {
- cString geometry = cString::sprintf("%dx%d!", width, height);
- buffer.scale(Geometry(*geometry));
- }
- return true;
- }
- catch (...) {
- return false;
- }
-}
-
-bool cImageLoader::LoadEPGImage(int eventID) {
- int width = config.epgImageWidth;
- int height = config.epgImageHeight;
- if ((width == 0)||(height==0))
- return false;
- bool success = false;
- if (config.epgImagePathSet) {
- success = LoadImage(cString::sprintf("%d", eventID), config.epgImagePath, "jpg");
+ if (!success && config.epgImagePathSet) {
+ success = LoadImage(*cString::sprintf("%d_0", eventID), *config.epgImagePath, "jpg");
}
if (!success) {
- success = LoadImage(cString::sprintf("%d", eventID), config.epgImagePathDefault, "jpg");
+ success = LoadImage(*cString::sprintf("%d_0", eventID), *config.epgImagePathDefault, "jpg");
}
if (!success)
return false;
@@ -112,16 +72,16 @@ bool cImageLoader::LoadEPGImage(int eventID) {
}
bool cImageLoader::LoadAdditionalEPGImage(cString name) {
- int width = config.epgImageWidthLarge;
- int height = config.epgImageHeightLarge;
+ int width = config.GetValue("epgImageWidthLarge");
+ int height = config.GetValue("epgImageHeightLarge");
if ((width == 0)||(height==0))
return false;
bool success = false;
if (config.epgImagePathSet) {
- success = LoadImage(name, config.epgImagePath, "jpg");
+ success = LoadImage(*name, *config.epgImagePath, "jpg");
}
if (!success) {
- success = LoadImage(name, config.epgImagePathDefault, "jpg");
+ success = LoadImage(*name, *config.epgImagePathDefault, "jpg");
}
if (!success)
return false;
@@ -132,14 +92,14 @@ bool cImageLoader::LoadAdditionalEPGImage(cString name) {
}
bool cImageLoader::LoadRecordingImage(cString Path) {
- int width = config.epgImageWidth;
- int height = config.epgImageHeight;
+ int width = config.GetValue("epgImageWidth");
+ int height = config.GetValue("epgImageHeight");
if ((width == 0)||(height==0))
return false;
cString recImage("");
if (FirstImageInFolder(Path, "jpg", &recImage)) {
recImage = cString::sprintf("/%s", *recImage);
- if (!LoadImage(*recImage, Path, "jpg"))
+ if (!LoadImage(*recImage, *Path, "jpg"))
return false;
buffer.sample( Geometry(width, height));
return true;
@@ -148,99 +108,59 @@ bool cImageLoader::LoadRecordingImage(cString Path) {
}
bool cImageLoader::LoadAdditionalRecordingImage(cString path, cString name) {
- int width = config.epgImageWidthLarge;
- int height = config.epgImageHeightLarge;
+ int width = config.GetValue("epgImageWidthLarge");
+ int height = config.GetValue("epgImageHeightLarge");
if ((width == 0)||(height==0))
return false;
- if (LoadImage(name, path, "jpg")) {
+ if (LoadImage(*name, *path, "jpg")) {
buffer.sample( Geometry(width, height));
return true;
}
return false;
}
-void cImageLoader::DrawBackground(tColor back, tColor blend, int width, int height, bool mirror) {
- Color Back = Argb2Color(back);
- Color Blend = Argb2Color(blend);
- Image tmp(Geometry(width, height), Blend);
- double arguments[9] = {0.0,(double)height,0.0,-1*(double)width,0.0,0.0,1.5*(double)width,0.0,1.0};
- tmp.sparseColor(MatteChannel, BarycentricColorInterpolate, 9, arguments);
- Image tmp2(Geometry(width, height), Back);
- tmp.composite(tmp2, 0, 0, OverlayCompositeOp);
- if (mirror)
- tmp.flop();
- buffer = tmp;
-}
-
-void cImageLoader::DrawBackground2(tColor back, tColor blend, int width, int height) {
- Color Back = Argb2Color(back);
- Color Blend = Argb2Color(blend);
- Image tmp(Geometry(width, height), Blend);
- double arguments[9] = {0.0,(double)height,0.0,-0.5*(double)width,0.0,0.0,0.75*(double)width,0.0,1.0};
- tmp.sparseColor(MatteChannel, BarycentricColorInterpolate, 9, arguments);
- Image tmp2(Geometry(width, height), Back);
- tmp.composite(tmp2, 0, 0, OverlayCompositeOp);
- buffer = tmp;
-}
-
-cImage cImageLoader::GetImage() {
- int w, h;
- w = buffer.columns();
- h = buffer.rows();
- cImage image (cSize(w, h));
- const PixelPacket *pixels = buffer.getConstPixels(0, 0, w, h);
- for (int iy = 0; iy < h; ++iy) {
- for (int ix = 0; ix < w; ++ix) {
- tColor col = (~int(pixels->opacity * 255 / MaxRGB) << 24)
- | (int(pixels->green * 255 / MaxRGB) << 8)
- | (int(pixels->red * 255 / MaxRGB) << 16)
- | (int(pixels->blue * 255 / MaxRGB) );
- image.SetPixel(cPoint(ix, iy), col);
- ++pixels;
- }
+bool cImageLoader::LoadPoster(const char *poster, int width, int height) {
+ if (LoadImage(poster)) {
+ buffer.sample(Geometry(width, height));
+ return true;
}
- return image;
-}
-
-Color cImageLoader::Argb2Color(tColor col) {
- tIndex alpha = (col & 0xFF000000) >> 24;
- tIndex red = (col & 0x00FF0000) >> 16;
- tIndex green = (col & 0x0000FF00) >> 8;
- tIndex blue = (col & 0x000000FF);
- Color color(MaxRGB*red/255, MaxRGB*green/255, MaxRGB*blue/255, MaxRGB*(0xFF-alpha)/255);
- return color;
+ return false;
}
-void cImageLoader::toLowerCase(std::string &str) {
- const int length = str.length();
- for(int i=0; i < length; ++i) {
- str[i] = std::tolower(str[i]);
+bool cImageLoader::SearchRecordingPoster(cString recPath, cString &found) {
+ cString manualPoster = cString::sprintf("%s/cover_vdr.jpg", *recPath);
+ if (FileSize(*manualPoster) != -1) {
+ found = manualPoster;
+ return true;
}
-}
-
-bool cImageLoader::LoadImage(cString FileName, cString Path, cString Extension) {
- try {
- cString File = cString::sprintf("%s%s.%s", *Path, *FileName, *Extension);
- dsyslog("nopacity: trying to load: %s", *File);
- buffer.read(*File);
- dsyslog("nopacity: %s sucessfully loaded", *File);
- } catch (...) {
- return false;
+ manualPoster = cString::sprintf("%s/../../../cover_vdr.jpg", *recPath);
+ if (FileSize(*manualPoster) != -1) {
+ found = manualPoster;
+ return true;
}
- return true;
+ manualPoster = cString::sprintf("%s/../../cover_vdr.jpg", *recPath);
+ if (FileSize(*manualPoster) != -1) {
+ found = manualPoster;
+ return true;
+ }
+ return false;
}
bool cImageLoader::FirstImageInFolder(cString Path, cString Extension, cString *recImage) {
- DIR *folder;
+ DIR *folder = NULL;
struct dirent *file;
folder = opendir(Path);
+ if (!folder)
+ return false;
while (file = readdir(folder)) {
if (endswith(file->d_name, *Extension)) {
std::string fileName = file->d_name;
- if (fileName.length() > 4)
- fileName = fileName.substr(0, fileName.length() - 4);
- else
- return false;
+ int strlen = fileName.length();
+ if (strlen < 8)
+ continue;
+ if (!fileName.compare(strlen-8, 8, "_vdr.jpg"))
+ continue;
+ fileName = fileName.substr(0, strlen - 4);
*recImage = fileName.c_str();
return true;
}
diff --git a/imageloader.h b/imageloader.h
index a5a0b5f..2c080ba 100644
--- a/imageloader.h
+++ b/imageloader.h
@@ -6,29 +6,24 @@
#include <vdr/osd.h>
#include <vdr/skins.h>
#include <Magick++.h>
+#include "imagemagickwrapper.h"
using namespace Magick;
-
-class cImageLoader {
+
+class cImageLoader : public cImageMagickWrapper {
public:
cImageLoader();
~cImageLoader();
cImage GetImage();
- bool LoadLogo(const char *logo, int width, int height);
- bool LoadIcon(const char *cIcon, int size);
- bool LoadIcon(const char *cIcon, int width, int height, bool preserveAspect = true);
+ bool LoadLogo(const char *logo, int width = config.GetValue("logoWidthOriginal"), int height = config.GetValue("logoHeightOriginal"));
bool LoadEPGImage(int eventID);
bool LoadAdditionalEPGImage(cString name);
bool LoadRecordingImage(cString Path);
bool LoadAdditionalRecordingImage(cString path, cString name);
- void DrawBackground(tColor back, tColor blend, int width, int height, bool mirror = false);
- void DrawBackground2(tColor back, tColor blend, int width, int height);
+ bool LoadPoster(const char *poster, int width, int height);
+ bool SearchRecordingPoster(cString recPath, cString &found);
private:
- Image buffer;
- Color Argb2Color(tColor col);
- void toLowerCase(std::string &str);
- bool LoadImage(cString FileName, cString Path, cString Extension);
- bool FirstImageInFolder(cString Path, cString Extension, cString *recImage);
+ bool FirstImageInFolder(cString Path, cString Extension, cString *recImage);
};
#endif //__NOPACITY_IMAGELOADER_H
diff --git a/imagemagickwrapper.c b/imagemagickwrapper.c
new file mode 100644
index 0000000..49fa221
--- /dev/null
+++ b/imagemagickwrapper.c
@@ -0,0 +1,162 @@
+#include <string>
+#include <sstream>
+#include "imagemagickwrapper.h"
+#include "config.h"
+#include "imagescaler.h"
+
+cImageMagickWrapper::cImageMagickWrapper() {
+ InitializeMagick(NULL);
+}
+
+cImageMagickWrapper::~cImageMagickWrapper() {
+}
+
+cImage *cImageMagickWrapper::CreateImage(int width, int height, bool preserveAspect) {
+ int w, h;
+ w = buffer.columns();
+ h = buffer.rows();
+ if (width == 0)
+ width = w;
+ if (height == 0)
+ height = h;
+ if (preserveAspect) {
+ unsigned scale_w = 1000 * width / w;
+ unsigned scale_h = 1000 * height / h;
+ if (scale_w > scale_h)
+ width = w * height / h;
+ else
+ height = h * width / w;
+ }
+ const PixelPacket *pixels = buffer.getConstPixels(0, 0, w, h);
+ cImage *image = new cImage(cSize(width, height));
+ tColor *imgData = (tColor *)image->Data();
+ if (w != width || h != height) {
+ ImageScaler scaler;
+ scaler.SetImageParameters(imgData, width, width, height, w, h);
+ for (const void *pixels_end = &pixels[w*h]; pixels < pixels_end; ++pixels)
+ scaler.PutSourcePixel(pixels->blue / ((MaxRGB + 1) / 256),
+ pixels->green / ((MaxRGB + 1) / 256),
+ pixels->red / ((MaxRGB + 1) / 256),
+ ~((unsigned char)(pixels->opacity / ((MaxRGB + 1) / 256))));
+ return image;
+ }
+ for (const void *pixels_end = &pixels[width*height]; pixels < pixels_end; ++pixels)
+ *imgData++ = ((~int(pixels->opacity / ((MaxRGB + 1) / 256)) << 24) |
+ (int(pixels->green / ((MaxRGB + 1) / 256)) << 8) |
+ (int(pixels->red / ((MaxRGB + 1) / 256)) << 16) |
+ (int(pixels->blue / ((MaxRGB + 1) / 256)) ));
+ return image;
+}
+
+cImage cImageMagickWrapper::CreateImageCopy() {
+ int w, h;
+ w = buffer.columns();
+ h = buffer.rows();
+ cImage image (cSize(w, h));
+ const PixelPacket *pixels = buffer.getConstPixels(0, 0, w, h);
+ for (int iy = 0; iy < h; ++iy) {
+ for (int ix = 0; ix < w; ++ix) {
+ tColor col = (~int(pixels->opacity * 255 / MaxRGB) << 24)
+ | (int(pixels->green * 255 / MaxRGB) << 8)
+ | (int(pixels->red * 255 / MaxRGB) << 16)
+ | (int(pixels->blue * 255 / MaxRGB) );
+ image.SetPixel(cPoint(ix, iy), col);
+ ++pixels;
+ }
+ }
+ return image;
+}
+
+bool cImageMagickWrapper::LoadImage(std::string FileName, std::string Path, std::string Extension) {
+ try {
+ std::stringstream sstrImgFile;
+ sstrImgFile << Path << FileName << "." << Extension;
+ std::string imgFile = sstrImgFile.str();
+ if (config.GetValue("debugImageLoading"))
+ dsyslog("nopacity: trying to load: %s", imgFile.c_str());
+ buffer.read(imgFile.c_str());
+ if (config.GetValue("debugImageLoading"))
+ dsyslog("nopacity: %s sucessfully loaded", imgFile.c_str());
+ } catch( Magick::Warning &warning ) {
+ if (config.GetValue("debugImageLoading"))
+ dsyslog("nopacity: Magick Warning: %s", warning.what());
+ return true;
+ } catch( Magick::Error &error ) {
+ if (config.GetValue("debugImageLoading"))
+ dsyslog("nopacity: Magick Error: %s", error.what());
+ return false;
+ } catch(...) {
+ if (config.GetValue("debugImageLoading"))
+ dsyslog("nopacity: an unknown Magick error occured during image loading");
+ return false;
+ }
+ return true;
+}
+
+bool cImageMagickWrapper::LoadImage(const char *fullpath) {
+ if ((fullpath == NULL) || (strlen(fullpath) < 5))
+ return false;
+ try {
+ if (config.GetValue("debugImageLoading"))
+ dsyslog("nopacity: trying to load: %s", fullpath);
+ buffer.read(fullpath);
+ if (config.GetValue("debugImageLoading"))
+ dsyslog("nopacity: %s sucessfully loaded", fullpath);
+ } catch( Magick::Warning &warning ) {
+ if (config.GetValue("debugImageLoading"))
+ dsyslog("nopacity: Magick Warning: %s", warning.what());
+ return true;
+ } catch( Magick::Error &error ) {
+ if (config.GetValue("debugImageLoading"))
+ dsyslog("nopacity: Magick Error: %s", error.what());
+ return false;
+ } catch(...) {
+ if (config.GetValue("debugImageLoading"))
+ dsyslog("nopacity: an unknown Magick error occured during image loading");
+ return false;
+ }
+ return true;
+}
+
+Color cImageMagickWrapper::Argb2Color(tColor col) {
+ tIndex alpha = (col & 0xFF000000) >> 24;
+ tIndex red = (col & 0x00FF0000) >> 16;
+ tIndex green = (col & 0x0000FF00) >> 8;
+ tIndex blue = (col & 0x000000FF);
+ Color color(MaxRGB*red/255, MaxRGB*green/255, MaxRGB*blue/255, MaxRGB*(0xFF-alpha)/255);
+ return color;
+}
+
+void cImageMagickWrapper::CreateGradient(tColor back, tColor blend, int width, int height, double wfactor, double hfactor) {
+ Color Back = Argb2Color(back);
+ Color Blend = Argb2Color(blend);
+ int maxw = MaxRGB * wfactor;
+ int maxh = MaxRGB * hfactor;
+
+ Image imgblend(Geometry(width, height), Blend);
+ imgblend.modifyImage();
+ imgblend.type(TrueColorMatteType);
+ PixelPacket *pixels = imgblend.getPixels(0, 0, width, height);
+ for (int x = 0; x < width; x++) {
+ for (int y = 0; y < height; y++) {
+ PixelPacket *pixel = pixels + y * width + x;
+ int opacity = (maxw / width * x + maxh - maxh / height * y) / 2;
+ pixel->opacity = (opacity <= MaxRGB) ? opacity : MaxRGB;
+ }
+ }
+ imgblend.syncPixels();
+
+ Image imgback(Geometry(width, height), Back);
+ imgback.composite(imgblend, 0, 0, OverCompositeOp);
+
+ buffer = imgback;
+}
+
+void cImageMagickWrapper::CreateBackground(tColor back, tColor blend, int width, int height, bool mirror) {
+ CreateGradient(back, blend, width, height, 0.8, 0.8);
+ if (mirror)
+ buffer.flop();
+}
+void cImageMagickWrapper::CreateBackgroundReverse(tColor back, tColor blend, int width, int height) {
+ CreateGradient(back, blend, width, height, 1.3, 0.7);
+}
diff --git a/imagemagickwrapper.h b/imagemagickwrapper.h
new file mode 100644
index 0000000..5f9901e
--- /dev/null
+++ b/imagemagickwrapper.h
@@ -0,0 +1,28 @@
+#ifndef __NOPACITY_IMAGEMAGICKWRAPPER_H
+#define __NOPACITY_IMAGEMAGICKWRAPPER_H
+
+#define X_DISPLAY_MISSING
+
+#include <Magick++.h>
+#include <vdr/osd.h>
+
+using namespace Magick;
+
+class cImageMagickWrapper {
+private:
+ void CreateGradient(tColor back, tColor blend, int width, int height, double wfactor, double hfactor);
+public:
+ cImageMagickWrapper();
+ ~cImageMagickWrapper();
+protected:
+ Image buffer;
+ Color Argb2Color(tColor col);
+ cImage *CreateImage(int width, int height, bool preserveAspect = true);
+ cImage CreateImageCopy(void);
+ bool LoadImage(std::string FileName, std::string Path, std::string Extension);
+ bool LoadImage(const char *fullpath);
+ void CreateBackground(tColor back, tColor blend, int width, int height, bool mirror = false);
+ void CreateBackgroundReverse(tColor back, tColor blend, int width, int height);
+};
+
+#endif //__NOPACITY_IMAGEMAGICKWRAPPER_H
diff --git a/imagescaler.c b/imagescaler.c
new file mode 100644
index 0000000..cebe912
--- /dev/null
+++ b/imagescaler.c
@@ -0,0 +1,149 @@
+
+#include "imagescaler.h"
+
+#include <cstdlib>
+#include <cmath>
+
+ImageScaler::ImageScaler() :
+ m_memory(NULL),
+ m_hor_filters(NULL),
+ m_ver_filters(NULL),
+ m_buffer(NULL),
+ m_dst_image(NULL),
+ m_dst_stride(0),
+ m_dst_width(0),
+ m_dst_height(0),
+ m_src_width(0),
+ m_src_height(0),
+ m_src_x(0),
+ m_src_y(0),
+ m_dst_x(0),
+ m_dst_y(0) {
+}
+
+ImageScaler::~ImageScaler() {
+ if ( m_memory ) free( m_memory );
+}
+
+// sin(x)/(x)
+static float sincf( float x ) {
+ if ( fabsf(x) < 0.05f ) return 1.0f - (1.0f/6.0f)*x*x; // taylor series approximation to avoid 0/0
+ return sin(x)/x;
+}
+
+static void CalculateFilters( ImageScaler::Filter *filters, int dst_size, int src_size ) {
+ const float fc = dst_size >= src_size ? 1.0f : ((float) dst_size)/((float) src_size);
+
+ for (int i = 0; i < dst_size; i++) {
+ const int d = 2*dst_size; // sample position denominator
+ const int e = (2*i+1) * src_size - dst_size; // sample position enumerator
+ int offset = e / d; // truncated sample position
+ const float sub_offset = ((float) (e - offset*d)) / ((float) d); // exact sample position is (float) e/d = offset + sub_offset
+
+ // calculate filter coefficients
+ float h[4];
+ for (int j=0; j<4; j++) {
+ const float t = 3.14159265359f * (sub_offset+(1-j));
+ h[j] = sincf( fc * t ) * cosf( 0.25f * t ); // sinc-lowpass and cos-window
+ }
+
+ // ensure that filter does not reach out off image bounds:
+ while ( offset < 1 ) {
+ h[0] += h[1];
+ h[1] = h[2];
+ h[2] = h[3];
+ h[3] = 0.0f;
+ offset++;
+ }
+
+ while ( offset+3 > src_size ) {
+ h[3] += h[2];
+ h[2] = h[1];
+ h[1] = h[0];
+ h[0] = 0.0f;
+ offset--;
+ }
+
+ // coefficients are normalized to sum up to 2048
+ const float norm = 2048.0f / ( h[0] + h[1] + h[2] + h[3] );
+
+ offset--; // offset of fist used pixel
+
+ filters[i].m_offset = offset + 4; // store offset of first unused pixel
+
+ for (int j=0; j<4; j++) {
+ const float t = norm * h[j];
+ filters[i].m_coeff[(offset+j) & 3] = (int) ((t > 0.0f) ? (t+0.5f) : (t-0.5f)); // consider ring buffer index permutations
+ }
+ }
+
+ // set end marker
+ filters[dst_size].m_offset = (unsigned) -1;
+
+}
+
+void ImageScaler::SetImageParameters( unsigned *dst_image, unsigned dst_stride, unsigned dst_width, unsigned dst_height, unsigned src_width, unsigned src_height ) {
+ m_src_x = 0;
+ m_src_y = 0;
+ m_dst_x = 0;
+ m_dst_y = 0;
+
+ m_dst_image = dst_image;
+ m_dst_stride = dst_stride;
+
+ // if image dimensions do not change we can keep the old filter coefficients
+ if ( (src_width == m_src_width) && (src_height == m_src_height) && (dst_width == m_dst_width) && (dst_height == m_dst_height) ) return;
+
+ m_dst_width = dst_width;
+ m_dst_height = dst_height;
+ m_src_width = src_width;
+ m_src_height = src_height;
+
+ if ( m_memory ) free( m_memory );
+
+ const unsigned hor_filters_size = (m_dst_width + 1) * sizeof(Filter); // reserve one extra position for end marker
+ const unsigned ver_filters_size = (m_dst_height + 1) * sizeof(Filter);
+ const unsigned buffer_size = 4 * m_dst_width * sizeof(TmpPixel);
+
+ char *p = (char *) malloc( hor_filters_size + ver_filters_size + buffer_size );
+
+ m_memory = p;
+
+ m_hor_filters = (Filter *) p; p += hor_filters_size;
+ m_ver_filters = (Filter *) p; p += ver_filters_size;
+ m_buffer = (TmpPixel *) p;
+
+ CalculateFilters( m_hor_filters, m_dst_width , m_src_width );
+ CalculateFilters( m_ver_filters, m_dst_height, m_src_height );
+}
+
+// shift range to 0..255 and clamp overflows
+static unsigned shift_clamp( int x ) {
+ x = ( x + (1<<21) ) >> 22;
+ if ( x < 0 ) return 0;
+ if ( x > 255 ) return 255;
+ return x;
+}
+
+void ImageScaler::NextSourceLine() {
+ m_dst_x = 0;
+ m_src_x = 0;
+ m_src_y++;
+
+ while ( m_ver_filters[m_dst_y].m_offset == m_src_y ) {
+ const int h0 = m_ver_filters[m_dst_y].m_coeff[0];
+ const int h1 = m_ver_filters[m_dst_y].m_coeff[1];
+ const int h2 = m_ver_filters[m_dst_y].m_coeff[2];
+ const int h3 = m_ver_filters[m_dst_y].m_coeff[3];
+ const TmpPixel *src = m_buffer;
+ unsigned *dst = m_dst_image + m_dst_stride * m_dst_y;
+
+ for (unsigned i=0; i<m_dst_width; i++) {
+ const ImageScaler::TmpPixel t( src[0]*h0 + src[1]*h1 + src[2]*h2 + src[3]*h3 );
+ src += 4;
+ dst[i] = shift_clamp(t[0]) | (shift_clamp(t[1])<<8) | (shift_clamp(t[2])<<16) | (shift_clamp(t[3])<<24);
+ }
+
+ m_dst_y++;
+ }
+}
diff --git a/imagescaler.h b/imagescaler.h
new file mode 100644
index 0000000..f2de6ba
--- /dev/null
+++ b/imagescaler.h
@@ -0,0 +1,97 @@
+#ifndef _ImageScaler_h
+#define _ImageScaler_h
+
+/*!
+ * this class scales images consisting of 4 components (RGBA)
+ * to an arbitrary size using a 4-tap filter
+ */
+class ImageScaler {
+public:
+
+ struct Filter {
+ unsigned m_offset;
+ short m_coeff[4];
+ };
+
+ ImageScaler();
+ ~ImageScaler();
+
+ //! set destination image and source image size
+ void SetImageParameters( unsigned *dst_image, unsigned dst_stride, unsigned dst_width, unsigned dst_height, unsigned src_width, unsigned src_height );
+
+ /*! process one pixel of source image; destination image is written while input is processed
+ * SetImageParameters() must be called first
+ */
+ void PutSourcePixel( unsigned char c0, unsigned char c1, unsigned char c2, unsigned char c3 ) {
+ m_hbuf[ (m_src_x++) & 3 ].Set( c0, c1, c2, c3 );
+
+ TmpPixel *bp = m_buffer + 4 * m_dst_x + (m_src_y & 3);
+ const Filter *fh;
+
+ while ( (fh=m_hor_filters+m_dst_x)->m_offset == m_src_x ) {
+ *bp = m_hbuf[0]*fh->m_coeff[0] + m_hbuf[1]*fh->m_coeff[1] + m_hbuf[2]*fh->m_coeff[2] + m_hbuf[3]*fh->m_coeff[3];
+ m_dst_x++;
+ bp += 4;
+ }
+
+ if ( m_src_x == m_src_width ) NextSourceLine();
+ }
+
+private:
+
+ //! temporary image pixel class - a 4-element integer vector
+ class TmpPixel {
+ public:
+ TmpPixel() {
+ }
+
+ TmpPixel( int c0, int c1, int c2, int c3 ) {
+ Set(c0,c1,c2,c3);
+ }
+
+ void Set( int c0, int c1, int c2, int c3 ) {
+ m_comp[0] = c0;
+ m_comp[1] = c1;
+ m_comp[2] = c2;
+ m_comp[3] = c3;
+ }
+
+ TmpPixel operator*( int s ) const {
+ return TmpPixel( m_comp[0]*s, m_comp[1]*s, m_comp[2]*s, m_comp[3]*s );
+ }
+
+ TmpPixel operator+( const TmpPixel &x ) const {
+ return TmpPixel( m_comp[0] + x[0], m_comp[1] + x[1], m_comp[2] + x[2], m_comp[3] + x[3] );
+ }
+
+ // return component i=[0..3] - No range check!
+ int operator[](unsigned i) const {
+ return m_comp[i];
+ }
+
+ private:
+ int m_comp[4];
+ };
+
+ //! this is called whenever one input line is processed completely
+ void NextSourceLine();
+
+ TmpPixel m_hbuf[4]; //! ring buffer for 4 input pixels
+ char *m_memory; //! buffer container
+ Filter *m_hor_filters; //! buffer for horizontal filters (one for each output image column)
+ Filter *m_ver_filters; //! buffer for vertical filters (one for each output image row)
+ TmpPixel *m_buffer; //! buffer contains 4 horizontally filtered input lines, multiplexed
+ unsigned *m_dst_image; //! pointer to destination image
+ unsigned m_dst_stride; //! destination image stride
+ unsigned m_dst_width; //! destination image width
+ unsigned m_dst_height; //! destination image height
+ unsigned m_src_width; //! source image width
+ unsigned m_src_height; //! source image height
+ unsigned m_src_x; //! x position of next source image pixel
+ unsigned m_src_y; //! y position of source image line currently beeing processed
+ unsigned m_dst_x; //! x position of next destination image pixel
+ unsigned m_dst_y; //! x position of next destination image line
+};
+
+#endif // _ImageScaler_h
+
diff --git a/logoconverter/backgrounds/bg1.png b/logoconverter/backgrounds/bg1.png
new file mode 100644
index 0000000..6d0aac2
Binary files /dev/null and b/logoconverter/backgrounds/bg1.png differ
diff --git a/logoconverter/backgrounds/bg2.png b/logoconverter/backgrounds/bg2.png
new file mode 100644
index 0000000..36e519f
Binary files /dev/null and b/logoconverter/backgrounds/bg2.png differ
diff --git a/logoconverter/backgrounds/bg3.png b/logoconverter/backgrounds/bg3.png
new file mode 100644
index 0000000..a215bc2
Binary files /dev/null and b/logoconverter/backgrounds/bg3.png differ
diff --git a/logoconverter/backgrounds/bg4.png b/logoconverter/backgrounds/bg4.png
new file mode 100644
index 0000000..293210a
Binary files /dev/null and b/logoconverter/backgrounds/bg4.png differ
diff --git a/logoconverter/backgrounds/fg1.png b/logoconverter/backgrounds/fg1.png
new file mode 100644
index 0000000..6c7ab9d
Binary files /dev/null and b/logoconverter/backgrounds/fg1.png differ
diff --git a/logoconverter/backgrounds/fg2.png b/logoconverter/backgrounds/fg2.png
new file mode 100644
index 0000000..d9fce76
Binary files /dev/null and b/logoconverter/backgrounds/fg2.png differ
diff --git a/logoconverter/backgrounds/fg3.png b/logoconverter/backgrounds/fg3.png
new file mode 100644
index 0000000..0aabdff
Binary files /dev/null and b/logoconverter/backgrounds/fg3.png differ
diff --git a/logoconverter/backgrounds/fg4.png b/logoconverter/backgrounds/fg4.png
new file mode 100644
index 0000000..8193d76
Binary files /dev/null and b/logoconverter/backgrounds/fg4.png differ
diff --git a/logoconverter/make_background.sh b/logoconverter/make_background.sh
new file mode 100644
index 0000000..a2acbcb
--- /dev/null
+++ b/logoconverter/make_background.sh
@@ -0,0 +1,33 @@
+#!/bin/bash -e
+#set -x
+
+#CONFIG
+
+SOURCEDIR=/etc/vdr/plugins/skinnopacity/logos
+OUTPUTDIR=/etc/vdr/plugins/skinnopacity/logos_darkred
+FOREGROUND=/usr/local/src/VDR/PLUGINS/src/skinnopacity/logoconverter/backgrounds/fg4.png
+BACKGROUND=/usr/local/src/VDR/PLUGINS/src/skinnopacity/logoconverter/backgrounds/bg2.png
+
+#MAIN
+IFS=$'\n'
+FILES=$(find $SOURCEDIR -name *.png | sort)
+sedstring="s!$SOURCEDIR!$OUTPUTDIR!g"
+
+[ ! -d $SOURCEDIR ] && (echo "ERR: $SOURCEDIR1 not found"; exit 1);
+[ ! -f $FOREGROUND ] && (echo "ERR: $FOREGROUND not found"; exit 1);
+[ ! -f $BACKGROUND ] && (echo "ERR: $BACKGROUND not found"; exit 1);
+
+echo "Convert new logos to format $(basename $OUTPUTDIR)"
+for file in $FILES; do
+ targetdir=`dirname $file | sed -e $sedstring`
+ targetfile="$targetdir/$(basename $file)"
+ if [ ! -f $targetfile ] ; then
+ echo $targetfile
+ [ ! -d $targetdir ] && mkdir -p $targetdir
+ convert +dither -background 'transparent' -resize '220x164' -extent '268x200' -gravity 'center' "$file" png:- 2> /dev/null | \
+ composite - $BACKGROUND png:- 2> /dev/null | \
+ composite -compose screen -blend 50x100 $FOREGROUND - "$targetfile" 2> /dev/null
+ fi
+done
+
+exit 0
diff --git a/menudetailview.c b/menudetailview.c
index 36165d2..e2a323a 100644
--- a/menudetailview.c
+++ b/menudetailview.c
@@ -1,491 +1,203 @@
#include "menudetailview.h"
-#include "services/epgsearch.h"
-#include <sstream>
-#include <iostream>
-#include <dirent.h>
-#include <vector>
-cNopacityMenuDetailView::cNopacityMenuDetailView(cOsd *osd) {
+/********************************************************************************************
+* cNopacityDetailView
+********************************************************************************************/
+cNopacityDetailView::cNopacityDetailView(eDetailViewType detailViewType, cOsd *osd, cImageCache *imgCache) {
+ type = detailViewType;
this->osd = osd;
- hasScrollbar = false;
-}
-
-cNopacityMenuDetailView::~cNopacityMenuDetailView(void) {
- delete font;
- if (fontHeader)
- delete fontHeader;
- if (fontHeaderLarge)
- delete fontHeaderLarge;
-}
-
-void cNopacityMenuDetailView::SetGeometry(int x, int width, int height, int top, int contentBorder, int headerHeight) {
+ this->imgCache = imgCache;
+ ev = NULL;
+ rec = NULL;
+ text = NULL;
+ view = NULL;
+ x = 0;
+ width = 0;
+ height = 0;
+ top = 0;
+ border = 0;
+ headerHeight = 0;
+}
+
+cNopacityDetailView::~cNopacityDetailView(void) {
+ Cancel(-1);
+ while (Active())
+ cCondWait::SleepMs(10);
+ if (view)
+ delete view;
+}
+
+void cNopacityDetailView::SetGeometry(int x, int width, int height, int top, int contentBorder, int headerHeight) {
this->x = x;
this->width = width;
this->height = height;
this->top = top;
this->border = contentBorder;
this->headerHeight = headerHeight;
- contentHeight = height - headerHeight;
-}
-
-int cNopacityMenuDetailView::DrawTextWrapper(cTextWrapper *wrapper, int top) {
- int linesText = wrapper->Lines();
- int textHeight = font->Height();
- int currentHeight = 0;
- for (int i=0; i < linesText; i++) {
- currentHeight = (i+1)*textHeight + top;
- pixmapContent->DrawText(cPoint(2*border, currentHeight), wrapper->GetLine(i), Theme.Color(clrMenuFontDetailViewText), clrTransparent, font);
- }
- return currentHeight + textHeight;
-}
-
-double cNopacityMenuDetailView::ScrollbarSize(void) {
- double barSize = (double)contentHeight / (double)contentDrawPortHeight;
- return barSize;
-}
-
-double cNopacityMenuDetailView::Offset(void) {
- double offset;
- if (((-1)*pixmapContent->DrawPort().Point().Y() + contentHeight + font->Height()) > contentDrawPortHeight)
- offset = (double)1 - ScrollbarSize();
- else
- offset = (double)((-1)*pixmapContent->DrawPort().Point().Y())/(double)((-1)*pixmapContent->DrawPort().Point().Y() + contentHeight);
- return offset;
-
}
-bool cNopacityMenuDetailView::Scroll(bool Up, bool Page) {
- int aktHeight = pixmapContent->DrawPort().Point().Y();
- int totalHeight = pixmapContent->DrawPort().Height();
- int screenHeight = pixmapContent->ViewPort().Height();
- int lineHeight = font->Height();
- bool scrolled = false;
- if (Up) {
- if (Page) {
- int newY = aktHeight + screenHeight;
- if (newY > 0)
- newY = 0;
- pixmapContent->SetDrawPortPoint(cPoint(0, newY));
- scrolled = true;
- } else {
- if (aktHeight < 0) {
- pixmapContent->SetDrawPortPoint(cPoint(0, aktHeight + lineHeight));
- scrolled = true;
+void cNopacityDetailView::InitiateViewType(void) {
+ static cPlugin *pScraper = GetScraperPlugin();
+ ScraperGetEventType call;
+ switch (type) {
+ case dvEvent: {
+ if (!ev)
+ break;
+ call.event = ev;
+ if (!pScraper) {
+ view = new cNopacityEPGView(osd, imgCache);
+ } else if (pScraper->Service("GetEventType", &call)) {
+ if (call.type == tMovie) {
+ view = new cNopacityMovieView(osd, imgCache, call.movieId);
+ } else if (call.type == tSeries) {
+ view = new cNopacitySeriesView(osd, imgCache, call.seriesId, call.episodeId);
+ }
+ } else {
+ view = new cNopacityEPGView(osd, imgCache);
}
- }
- } else {
- if (Page) {
- int newY = aktHeight - screenHeight;
- if ((-1)*newY > totalHeight - screenHeight)
- newY = (-1)*(totalHeight - screenHeight);
- pixmapContent->SetDrawPortPoint(cPoint(0, newY));
- scrolled = true;
- } else {
- if (totalHeight - ((-1)*aktHeight + lineHeight) > screenHeight) {
- pixmapContent->SetDrawPortPoint(cPoint(0, aktHeight - lineHeight));
- scrolled = true;
+ view->SetTitle(ev->Title());
+ view->SetSubTitle(ev->ShortText());
+ view->SetInfoText(ev->Description());
+ cString dateTime;
+ time_t vps = ev->Vps();
+ if (vps) {
+ dateTime = cString::sprintf("%s %s - %s (%d %s) VPS: %s", *ev->GetDateString(), *ev->GetTimeString(), *ev->GetEndTimeString(), ev->Duration()/60, tr("min"), *TimeString(vps));
+ } else {
+ dateTime = cString::sprintf("%s %s - %s (%d %s)", *ev->GetDateString(), *ev->GetTimeString(), *ev->GetEndTimeString(), ev->Duration()/60, tr("min"));
}
- }
- }
- return scrolled;
-}
-
-//---------------cNopacityMenuDetailEventView---------------------
-
-cNopacityMenuDetailEventView::cNopacityMenuDetailEventView(cOsd *osd, const cEvent *Event) : cNopacityMenuDetailView(osd) {
- event = Event;
- numEPGPics = 0;
-}
-
-cNopacityMenuDetailEventView::~cNopacityMenuDetailEventView(void) {
- osd->DestroyPixmap(pixmapHeader);
- osd->DestroyPixmap(pixmapContent);
- osd->DestroyPixmap(pixmapLogo);
-}
-
-void cNopacityMenuDetailEventView::CreatePixmaps(void) {
- pixmapHeader = osd->CreatePixmap(3, cRect(x, top, width, headerHeight));
- pixmapContent = osd->CreatePixmap(3, cRect(x, top + headerHeight, width, contentHeight),
- cRect(0, 0, width, contentDrawPortHeight));
- pixmapLogo = osd->CreatePixmap(4, cRect(x + border, top + max((headerHeight-config.logoHeight)/2,1), config.detailViewLogoWidth, config.detailViewLogoHeight));
-
- pixmapHeader->Fill(clrTransparent);
- pixmapHeader->DrawRectangle(cRect(0, headerHeight - 2, width, 2), Theme.Color(clrMenuBorder));
- pixmapContent->Fill(clrTransparent);
- pixmapLogo->Fill(clrTransparent);
-
-}
-
-void cNopacityMenuDetailEventView::SetFonts(void) {
- font = cFont::CreateFont(config.fontName, contentHeight / 25 + 3 + config.fontDetailView);
- fontHeaderLarge = cFont::CreateFont(config.fontName, headerHeight / 4 + config.fontDetailViewHeaderLarge);
- fontHeader = cFont::CreateFont(config.fontName, headerHeight / 6 + config.fontDetailViewHeader);
-}
-
-void cNopacityMenuDetailEventView::SetContent(void) {
- if (event) {
- content.Set(event->Description(), font, width - 4 * border);
- if (config.displayRerunsDetailEPGView) {
- LoadReruns();
- }
- }
-}
-
-void cNopacityMenuDetailEventView::SetContentHeight(void) {
- int lineHeight = font->Height();
- int linesContent = content.Lines() + 1;
- if (config.displayRerunsDetailEPGView) {
- linesContent+= reruns.Lines() + 2;
- }
- int heightContentText = linesContent * lineHeight;
-
- if (config.displayAdditionalEPGPictures) {
- heightContentText += HeightEPGPics();
- }
-
- if (heightContentText > contentHeight) {
- contentDrawPortHeight = heightContentText;
- hasScrollbar = true;
- } else {
- contentDrawPortHeight = contentHeight;
- }
-}
-
-int cNopacityMenuDetailEventView::HeightEPGPics(void) {
- int numPicsAvailable = 0;
- for (int i=1; i <= config.numAdditionalEPGPictures; i++) {
- cString epgimage;
- if (config.epgImagePathSet) {
- epgimage = cString::sprintf("%s%d_%d.jpg", *config.epgImagePath, event->EventID(), i);
- } else {
- epgimage = cString::sprintf("%s%d_%d.jpg", *config.epgImagePathDefault, event->EventID(), i);
- }
- FILE *fp = fopen(*epgimage, "r");
- if (fp) {
- numPicsAvailable = i;
- fclose(fp);
- } else {
- break;
- }
- }
- numEPGPics = numPicsAvailable;
- int picsPerLine = width / (config.epgImageWidthLarge + border);
- int picLines = numPicsAvailable / picsPerLine;
- if (numPicsAvailable%picsPerLine != 0)
- picLines++;
- return picLines * (config.epgImageHeightLarge + border) + 2*border;
-}
-
-void cNopacityMenuDetailEventView::Render(void) {
- DrawHeader();
- int currentHight = DrawTextWrapper(&content, 0);
- if (config.displayRerunsDetailEPGView) {
- currentHight = DrawTextWrapper(&reruns, currentHight);
- }
- if (config.displayAdditionalEPGPictures) {
- DrawEPGPictures(currentHight);
- }
-}
-
-void cNopacityMenuDetailEventView::DrawHeader(void) {
- cImageLoader imgLoader;
- int logoWidth = config.detailViewLogoWidth;
- cChannel *channel = Channels.GetByChannelID(event->ChannelID(), true);
- if (channel && channel->Name() && imgLoader.LoadLogo(channel->Name(), logoWidth, config.detailViewLogoHeight)) {
- pixmapLogo->DrawImage(cPoint(0, max((headerHeight - config.detailViewLogoHeight - border)/2, 0)), imgLoader.GetImage());
- }
- int widthTextHeader = width - 4 * border - logoWidth;
- if (imgLoader.LoadEPGImage(event->EventID())) {
- pixmapHeader->DrawImage(cPoint(width - config.epgImageWidth - border, (headerHeight-config.epgImageHeight)/2), imgLoader.GetImage());
- if (config.roundedCorners) {
- int radius = config.cornerRadius;
- int x = width - config.epgImageWidth - border;
- int y = (headerHeight-config.epgImageHeight)/2;
- pixmapHeader->DrawEllipse(cRect(x,y,radius,radius), clrTransparent, -2);
- pixmapHeader->DrawEllipse(cRect(x + config.epgImageWidth - radius,y,radius,radius), clrTransparent, -1);
- pixmapHeader->DrawEllipse(cRect(x,y + config.epgImageHeight - radius,radius,radius), clrTransparent, -3);
- pixmapHeader->DrawEllipse(cRect(x + config.epgImageWidth - radius,y + config.epgImageHeight - radius,radius,radius), clrTransparent, -4);
- }
- widthTextHeader -= config.epgImageWidth;
- }
-
- int lineHeight = fontHeaderLarge->Height();
-
- cString dateTime = cString::sprintf("%s %s - %s", *event->GetDateString(), *event->GetTimeString(), *event->GetEndTimeString());
- pixmapHeader->DrawText(cPoint(logoWidth + 2*border, (lineHeight - fontHeader->Height())/2), *dateTime, Theme.Color(clrMenuFontDetailViewHeader), clrTransparent, fontHeader);
-
- cTextWrapper title;
- title.Set(event->Title(), fontHeaderLarge, widthTextHeader);
- int currentLineHeight = lineHeight;
- for (int i=0; i < title.Lines(); i++) {
- pixmapHeader->DrawText(cPoint(logoWidth + 2*border, currentLineHeight), title.GetLine(i), Theme.Color(clrMenuFontDetailViewHeaderTitle), clrTransparent, fontHeaderLarge);
- currentLineHeight += lineHeight;
- }
-
- cTextWrapper shortText;
- shortText.Set(event->ShortText(), fontHeader, widthTextHeader);
- currentLineHeight += (lineHeight - fontHeader->Height())/2;
- for (int i=0; i < shortText.Lines(); i++) {
- if ((currentLineHeight + fontHeader->Height()) < headerHeight) {
- pixmapHeader->DrawText(cPoint(logoWidth + 2*border, currentLineHeight), shortText.GetLine(i), Theme.Color(clrMenuFontDetailViewHeader), clrTransparent, fontHeader);
- currentLineHeight += fontHeader->Height();
- } else
- break;
- }
-
-}
-
-void cNopacityMenuDetailEventView::LoadReruns(void) {
- cPlugin *epgSearchPlugin = cPluginManager::GetPlugin("epgsearch");
- if (epgSearchPlugin && !isempty(event->Title())) {
- std::stringstream sstrReruns;
- Epgsearch_searchresults_v1_0 data;
- std::string strQuery = event->Title();
- if (config.useSubtitleRerun > 0) {
- if (config.useSubtitleRerun == 2 || !isempty(event->ShortText()))
- strQuery += "~";
- if (!isempty(event->ShortText()))
- strQuery += event->ShortText();
- data.useSubTitle = true;
- } else {
- data.useSubTitle = false;
- }
- data.query = (char *)strQuery.c_str();
- data.mode = 0;
- data.channelNr = 0;
- data.useTitle = true;
- data.useDescription = false;
-
- if (epgSearchPlugin->Service("Epgsearch-searchresults-v1.0", &data)) {
- cList<Epgsearch_searchresults_v1_0::cServiceSearchResult>* list = data.pResultList;
- if (list && (list->Count() > 1)) {
- sstrReruns << tr("RERUNS OF THIS SHOW") << ':' << std::endl;
- int i = 0;
- for (Epgsearch_searchresults_v1_0::cServiceSearchResult *r = list->First(); r && i < config.numReruns; r = list->Next(r)) {
- if ((event->ChannelID() == r->event->ChannelID()) && (event->StartTime() == r->event->StartTime()))
- continue;
- i++;
- sstrReruns << "- "
- << *DayDateTime(r->event->StartTime());
- cChannel *channel = Channels.GetByChannelID(r->event->ChannelID(), true, true);
- if (channel)
- sstrReruns << " " << channel->ShortName(true);
- sstrReruns << ": " << r->event->Title();
- if (!isempty(r->event->ShortText()))
- sstrReruns << "~" << r->event->ShortText();
- sstrReruns << std::endl;
+ view->SetDateTime(*dateTime);
+ view->SetChannel(Channels.GetByChannelID(ev->ChannelID(), true));
+ view->SetEventID(ev->EventID());
+ break; }
+ case dvRecording: {
+ if (!rec)
+ break;
+ call.recording = rec;
+ if (!pScraper) {
+ view = new cNopacityEPGView(osd, imgCache);
+ } else if (pScraper->Service("GetEventType", &call)) {
+ if (call.type == tMovie) {
+ view = new cNopacityMovieView(osd, imgCache, call.movieId);
+ } else if (call.type == tSeries) {
+ view = new cNopacitySeriesView(osd, imgCache, call.seriesId, call.episodeId);
}
- delete list;
- }
- }
- reruns.Set(sstrReruns.str().c_str(), font, width - 4 * border);
- }
-}
-
-void cNopacityMenuDetailEventView::DrawEPGPictures(int height) {
- int picsPerLine = width / (config.epgImageWidthLarge + border);
- int currentX = border;
- int currentY = height + border;
- int currentPicsPerLine = 1;
- cImageLoader imgLoader;
- for (int i=1; i <= numEPGPics; i++) {
- cString epgimage = cString::sprintf("%d_%d", event->EventID(), i);
- if (imgLoader.LoadAdditionalEPGImage(epgimage)) {
- pixmapContent->DrawImage(cPoint(currentX, currentY), imgLoader.GetImage());
- if (config.roundedCorners) {
- int radius = config.cornerRadius;
- pixmapContent->DrawEllipse(cRect(currentX,currentY,radius,radius), clrTransparent, -2);
- pixmapContent->DrawEllipse(cRect(currentX + config.epgImageWidthLarge - radius,currentY,radius,radius), clrTransparent, -1);
- pixmapContent->DrawEllipse(cRect(currentX,currentY + config.epgImageHeightLarge - radius,radius,radius), clrTransparent, -3);
- pixmapContent->DrawEllipse(cRect(currentX + config.epgImageWidthLarge - radius,currentY + config.epgImageHeightLarge - radius,radius,radius), clrTransparent, -4);
+ } else {
+ view = new cNopacityEPGView(osd, imgCache);
}
- if (currentPicsPerLine < picsPerLine) {
- currentX += config.epgImageWidthLarge + border;
- currentPicsPerLine++;
+ const cRecordingInfo *info = rec->Info();
+ if (info) {
+ view->SetTitle(info->Title());
+ view->SetSubTitle(info->ShortText());
+ view->SetInfoText(info->Description());
+ view->SetChannel(Channels.GetByChannelID(info->ChannelID(), true));
} else {
- currentX = border;
- currentY += config.epgImageHeightLarge + border;
- currentPicsPerLine = 1;
+ view->SetTitle(rec->Name());
}
- } else {
+ int recDuration = rec->LengthInSeconds();
+ recDuration = (recDuration>0)?(recDuration / 60):0;
+ cString dateTime = cString::sprintf("%s %s (%d %s)", *DateString(rec->Start()), *TimeString(rec->Start()), recDuration, tr("min"));
+ view->SetDateTime(*dateTime);
+ view->SetRecFileName(rec->FileName());
+ break; }
+ case dvText:
+ view = new cNopacityTextView(osd, imgCache);
+ view->SetInfoText(text);
+ break;
+ default:
break;
- }
}
}
-
-//------------------cNopacityMenuDetailRecordingView------------------
-
-cNopacityMenuDetailRecordingView::cNopacityMenuDetailRecordingView(cOsd *osd, const cRecording *Recording) : cNopacityMenuDetailView(osd) {
- recording = Recording;
- info = Recording->Info();
-}
-
-cNopacityMenuDetailRecordingView::~cNopacityMenuDetailRecordingView(void) {
- osd->DestroyPixmap(pixmapHeader);
- osd->DestroyPixmap(pixmapContent);
+void cNopacityDetailView::KeyInput(bool Up, bool Page) {
+ if (Running())
+ return;
+ if (!view)
+ return;
+ if (Up && Page) {
+ view->KeyLeft();
+ view->Start();
+ } else if (!Up && Page) {
+ view->KeyRight();
+ view->Start();
+ } else if (Up && !Page) {
+ bool scrolled = view->KeyUp();
+ if (scrolled) {
+ view->DrawScrollbar();
+ osd->Flush();
+ }
+ }else if (!Up && !Page) {
+ bool scrolled = view->KeyDown();
+ if (scrolled) {
+ view->DrawScrollbar();
+ osd->Flush();
+ }
+ }
}
-void cNopacityMenuDetailRecordingView::CreatePixmaps(void) {
- pixmapHeader = osd->CreatePixmap(3, cRect(x, top, width, headerHeight));
- pixmapContent = osd->CreatePixmap(3, cRect(x, top + headerHeight, width, contentHeight),
- cRect(0, 0, width, contentDrawPortHeight));
-
- pixmapHeader->Fill(clrTransparent);
- pixmapHeader->DrawRectangle(cRect(0, headerHeight - 2, width, 2), Theme.Color(clrMenuBorder));
- pixmapContent->Fill(clrTransparent);
-}
+std::string cNopacityDetailView::LoadReruns(void) {
+ if (!ev)
+ return "";
+
+ cPlugin *epgSearchPlugin = cPluginManager::GetPlugin("epgsearch");
+ if (!epgSearchPlugin)
+ return "";
-void cNopacityMenuDetailRecordingView::SetFonts(void) {
- font = cFont::CreateFont(config.fontName, contentHeight / 25 + config.fontDetailView);
- fontHeaderLarge = cFont::CreateFont(config.fontName, headerHeight / 4 + config.fontDetailViewHeaderLarge);
- fontHeader = cFont::CreateFont(config.fontName, headerHeight / 6 + config.fontDetailViewHeader);
-}
+ if (isempty(ev->Title()))
+ return "";
+
+ std::stringstream sstrReruns;
+ sstrReruns << tr("Reruns of ") << "\"" << ev->Title() << "\":" << std::endl << std::endl;
-void cNopacityMenuDetailRecordingView::SetContent(void) {
- if (recording) {
- content.Set(recording->Info()->Description(), font, width - 4 * border);
- LoadRecordingInformation();
- }
-}
+ Epgsearch_searchresults_v1_0 data;
+ std::string strQuery = ev->Title();
-void cNopacityMenuDetailRecordingView::SetContentHeight(void) {
- int lineHeight = font->Height();
- int linesContent = content.Lines() + 1;
- linesContent+= additionalInfo.Lines() + 1;
- int heightContentText = linesContent * lineHeight;
- if (config.displayAdditionalRecEPGPictures) {
- if (LoadEPGPics())
- heightContentText += HeightEPGPics();
- }
- if (heightContentText > contentHeight) {
- contentDrawPortHeight = heightContentText;
- hasScrollbar = true;
+ if (config.GetValue("useSubtitleRerun") > 0) {
+ if (config.GetValue("useSubtitleRerun") == 2 && !isempty(ev->ShortText())) {
+ strQuery += "~";
+ strQuery += ev->ShortText();
+ }
+ data.useSubTitle = true;
} else {
- contentDrawPortHeight = contentHeight;
+ data.useSubTitle = false;
}
-}
-
-bool cNopacityMenuDetailRecordingView::LoadEPGPics(void) {
- DIR *dirHandle;
- struct dirent *dirEntry;
- dirHandle = opendir(recording->FileName());
- int picsFound = 0;
- if (dirHandle != NULL) {
- while ( 0 != (dirEntry = readdir(dirHandle))) {
- if (endswith(dirEntry->d_name, "jpg")) {
- std::string fileName = dirEntry->d_name;
- if (fileName.length() > 4) {
- fileName = fileName.substr(0, fileName.length() - 4);
- epgpics.push_back(fileName);
- picsFound++;
+ data.query = (char *)strQuery.c_str();
+ data.mode = 0;
+ data.channelNr = 0;
+ data.useTitle = true;
+ data.useDescription = false;
+
+ bool foundRerun = false;
+ if (epgSearchPlugin->Service("Epgsearch-searchresults-v1.0", &data)) {
+ cList<Epgsearch_searchresults_v1_0::cServiceSearchResult>* list = data.pResultList;
+ if (list && (list->Count() > 1)) {
+ foundRerun = true;
+ int i = 0;
+ for (Epgsearch_searchresults_v1_0::cServiceSearchResult *r = list->First(); r && i < config.GetValue("numReruns"); r = list->Next(r)) {
+ if ((ev->ChannelID() == r->event->ChannelID()) && (ev->StartTime() == r->event->StartTime()))
+ continue;
+ i++;
+ sstrReruns << *DayDateTime(r->event->StartTime());
+ cChannel *channel = Channels.GetByChannelID(r->event->ChannelID(), true, true);
+ if (channel) {
+ sstrReruns << ", " << trVDR("Channel") << " " << channel->Number() << ":";
+ sstrReruns << " " << channel->ShortName(true);
}
+ sstrReruns << "\n" << r->event->Title();
+ if (!isempty(r->event->ShortText()))
+ sstrReruns << "~" << r->event->ShortText();
+ sstrReruns << std::endl << std::endl;
}
- if (picsFound >= config.numAdditionalRecEPGPictures)
- break;
- }
- closedir(dirHandle);
- }
- if (picsFound > 0)
- return true;
- return false;
-}
-
-int cNopacityMenuDetailRecordingView::HeightEPGPics(void) {
- int numPicsAvailable = epgpics.size();
- int picsPerLine = width / (config.epgImageWidthLarge + border);
- int picLines = numPicsAvailable / picsPerLine;
- if (numPicsAvailable%picsPerLine != 0)
- picLines++;
- return picLines * (config.epgImageHeightLarge + border) + 2*border;
-}
-
-void cNopacityMenuDetailRecordingView::DrawEPGPictures(int height) {
- int picsPerLine = width / (config.epgImageWidthLarge + border);
- int currentX = border;
- int currentY = height + border;
- int currentPicsPerLine = 1;
- cImageLoader imgLoader;
- for (unsigned i=0; i < epgpics.size(); i++) {
- cString path = cString::sprintf("%s/", recording->FileName());
- cString epgimage = epgpics.at(i).c_str();
- if (imgLoader.LoadAdditionalRecordingImage(path, epgimage)) {
- pixmapContent->DrawImage(cPoint(currentX, currentY), imgLoader.GetImage());
- if (config.roundedCorners) {
- int radius = config.cornerRadius;
- pixmapContent->DrawEllipse(cRect(currentX,currentY,radius,radius), clrTransparent, -2);
- pixmapContent->DrawEllipse(cRect(currentX + config.epgImageWidthLarge - radius,currentY,radius,radius), clrTransparent, -1);
- pixmapContent->DrawEllipse(cRect(currentX,currentY + config.epgImageHeightLarge - radius,radius,radius), clrTransparent, -3);
- pixmapContent->DrawEllipse(cRect(currentX + config.epgImageWidthLarge - radius,currentY + config.epgImageHeightLarge - radius,radius,radius), clrTransparent, -4);
- }
- if (currentPicsPerLine < picsPerLine) {
- currentX += config.epgImageWidthLarge + border;
- currentPicsPerLine++;
- } else {
- currentX = border;
- currentY += config.epgImageHeightLarge + border;
- currentPicsPerLine = 1;
- }
- } else {
- break;
+ delete list;
}
}
-}
-void cNopacityMenuDetailRecordingView::Render(void) {
- DrawHeader();
- int currentHeight = DrawTextWrapper(&content, 0);
- currentHeight = DrawTextWrapper(&additionalInfo, currentHeight);
- if (epgpics.size() > 0) {
- DrawEPGPictures(currentHeight);
- }
-}
-
-void cNopacityMenuDetailRecordingView::DrawHeader(void) {
- cImageLoader imgLoader;
- int widthTextHeader = width - 4 * border;
- if (imgLoader.LoadRecordingImage(recording->FileName())) {
- pixmapHeader->DrawImage(cPoint(width - config.epgImageWidth - border, (headerHeight-config.epgImageHeight)/2), imgLoader.GetImage());
- if (config.roundedCorners) {
- int radius = config.cornerRadius;
- int x = width - config.epgImageWidth - border;
- int y = (headerHeight-config.epgImageHeight)/2;
- pixmapHeader->DrawEllipse(cRect(x,y,radius,radius), clrTransparent, -2);
- pixmapHeader->DrawEllipse(cRect(x + config.epgImageWidth - radius,y,radius,radius), clrTransparent, -1);
- pixmapHeader->DrawEllipse(cRect(x,y + config.epgImageHeight - radius,radius,radius), clrTransparent, -3);
- pixmapHeader->DrawEllipse(cRect(x + config.epgImageWidth - radius,y + config.epgImageHeight - radius,radius,radius), clrTransparent, -4);
- }
- widthTextHeader -= config.epgImageWidth;
- }
- int lineHeight = fontHeaderLarge->Height();
- cString dateTime = cString::sprintf("%s %s", *DateString(recording->Start()), *TimeString(recording->Start()));
- pixmapHeader->DrawText(cPoint(2*border, (lineHeight - fontHeader->Height())/2), *dateTime, Theme.Color(clrMenuFontDetailViewHeader), clrTransparent, fontHeader);
-
- const char *Title = info->Title();
- if (isempty(Title))
- Title = recording->Name();
- cTextWrapper title;
- title.Set(Title, fontHeaderLarge, widthTextHeader);
- int currentLineHeight = lineHeight;
- for (int i=0; i < title.Lines(); i++) {
- pixmapHeader->DrawText(cPoint(2*border, currentLineHeight), title.GetLine(i), Theme.Color(clrMenuFontDetailViewHeaderTitle), clrTransparent, fontHeaderLarge);
- currentLineHeight += lineHeight;
- }
-
- if (!isempty(info->ShortText())) {
- cTextWrapper shortText;
- shortText.Set(info->ShortText(), fontHeader, widthTextHeader);
- for (int i=0; i < shortText.Lines(); i++) {
- if ((currentLineHeight + fontHeader->Height()) < headerHeight) {
- pixmapHeader->DrawText(cPoint(2*border, currentLineHeight), shortText.GetLine(i), Theme.Color(clrMenuFontDetailViewHeader), clrTransparent, fontHeader);
- currentLineHeight += fontHeader->Height();
- } else
- break;
- }
+ if (!foundRerun) {
+ sstrReruns << std::endl << tr("No reruns found");
}
+ return sstrReruns.str();
}
-void cNopacityMenuDetailRecordingView::LoadRecordingInformation(void) {
- const cRecordingInfo *Info = recording->Info();
+std::string cNopacityDetailView::LoadRecordingInformation(void) {
+ const cRecordingInfo *Info = rec->Info();
unsigned long long nRecSize = -1;
unsigned long long nFileSize[1000];
nFileSize[0] = 0;
@@ -494,10 +206,10 @@ void cNopacityMenuDetailRecordingView::LoadRecordingInformation(void) {
cString filename;
int rc = 0;
do {
- if (recording->IsPesRecording())
- filename = cString::sprintf("%s/%03d.vdr", recording->FileName(), ++i);
+ if (rec->IsPesRecording())
+ filename = cString::sprintf("%s/%03d.vdr", rec->FileName(), ++i);
else
- filename = cString::sprintf("%s/%05d.ts", recording->FileName(), ++i);
+ filename = cString::sprintf("%s/%05d.ts", rec->FileName(), ++i);
rc = stat(filename, &filebuf);
if (rc == 0)
nFileSize[i] = nFileSize[i-1] + filebuf.st_size;
@@ -509,8 +221,8 @@ void cNopacityMenuDetailRecordingView::LoadRecordingInformation(void) {
nRecSize = nFileSize[i-1];
cMarks marks;
- bool fHasMarks = marks.Load(recording->FileName(), recording->FramesPerSecond(), recording->IsPesRecording()) && marks.Count();
- cIndexFile *index = new cIndexFile(recording->FileName(), false, recording->IsPesRecording());
+ bool fHasMarks = marks.Load(rec->FileName(), rec->FramesPerSecond(), rec->IsPesRecording()) && marks.Count();
+ cIndexFile *index = new cIndexFile(rec->FileName(), false, rec->IsPesRecording());
int nCutLength = 0;
long nCutInFrame = 0;
@@ -554,8 +266,8 @@ void cNopacityMenuDetailRecordingView::LoadRecordingInformation(void) {
if (channel)
sstrInfo << trVDR("Channel") << ": " << channel->Number() << " - " << channel->Name() << std::endl;
if (nRecSize < 0) {
- if ((nRecSize = ReadSizeVdr(recording->FileName())) < 0) {
- nRecSize = DirSizeMB(recording->FileName());
+ if ((nRecSize = ReadSizeVdr(rec->FileName())) < 0) {
+ nRecSize = DirSizeMB(rec->FileName());
}
}
if (nRecSize >= 0) {
@@ -573,27 +285,59 @@ void cNopacityMenuDetailRecordingView::LoadRecordingInformation(void) {
}
sstrInfo << (const char*)strRecSize << std::endl;
}
-
+
if (index) {
int nLastIndex = index->Last();
if (nLastIndex) {
cString strLength;
if (fHasMarks) {
- strLength = cString::sprintf("%s: %s (%s %s)", tr("Length"), *IndexToHMSF(nLastIndex, false, recording->FramesPerSecond()), tr("cut"), *IndexToHMSF(nCutLength, false, recording->FramesPerSecond()));
+ strLength = cString::sprintf("%s: %s (%s %s)", tr("Length"), *IndexToHMSF(nLastIndex, false, rec->FramesPerSecond()), tr("cut"), *IndexToHMSF(nCutLength, false, rec->FramesPerSecond()));
} else {
- strLength = cString::sprintf("%s: %s", tr("Length"), *IndexToHMSF(nLastIndex, false, recording->FramesPerSecond()));
+ strLength = cString::sprintf("%s: %s", tr("Length"), *IndexToHMSF(nLastIndex, false, rec->FramesPerSecond()));
}
sstrInfo << (const char*)strLength << std::endl;
- cString strBitrate = cString::sprintf("%s: %s\n%s: %.2f MBit/s (Video+Audio)", tr("Format"), recording->IsPesRecording() ? "PES" : "TS", tr("Est. bitrate"), (float)nRecSize / nLastIndex * recording->FramesPerSecond() * 8 / MEGABYTE(1));
+ cString strBitrate = cString::sprintf("%s: %s\n%s: %.2f MBit/s (Video+Audio)", tr("Format"), rec->IsPesRecording() ? "PES" : "TS", tr("Est. bitrate"), (float)nRecSize / nLastIndex * rec->FramesPerSecond() * 8 / MEGABYTE(1));
sstrInfo << (const char*)strBitrate << std::endl;
}
}
delete index;
-
- additionalInfo.Set(sstrInfo.str().c_str(), font, width - 4 * border);
+
+ if (Info) {
+ const char *aux = NULL;
+ aux = Info->Aux();
+ if (aux) {
+ std::string strAux = aux;
+ std::string auxEpgsearch = StripXmlTag(strAux, "epgsearch");
+ if (!auxEpgsearch.empty()) {
+ std::string searchTimer = StripXmlTag(auxEpgsearch, "searchtimer");
+ if (!searchTimer.empty()) {
+ sstrInfo << tr("Search timer") << ": " << searchTimer << std::endl;
+ }
+ }
+ }
+ }
+
+ return sstrInfo.str();
}
-int cNopacityMenuDetailRecordingView::ReadSizeVdr(const char *strPath) {
+std::string cNopacityDetailView::StripXmlTag(std::string &Line, const char *Tag) {
+ // set the search strings
+ std::stringstream strStart, strStop;
+ strStart << "<" << Tag << ">";
+ strStop << "</" << Tag << ">";
+ // find the strings
+ std::string::size_type locStart = Line.find(strStart.str());
+ std::string::size_type locStop = Line.find(strStop.str());
+ if (locStart == std::string::npos || locStop == std::string::npos)
+ return "";
+ // extract relevant text
+ int pos = locStart + strStart.str().size();
+ int len = locStop - pos;
+ return len < 0 ? "" : Line.substr(pos, len);
+}
+
+
+int cNopacityDetailView::ReadSizeVdr(const char *strPath) {
int dirSize = -1;
char buffer[20];
char *strFilename = NULL;
@@ -613,46 +357,17 @@ int cNopacityMenuDetailRecordingView::ReadSizeVdr(const char *strPath) {
return dirSize;
}
-//---------------cNopacityMenuDetailTextView---------------------
-
-cNopacityMenuDetailTextView::cNopacityMenuDetailTextView(cOsd *osd, const char *text) : cNopacityMenuDetailView(osd) {
- this->text = text;
-}
-
-cNopacityMenuDetailTextView::~cNopacityMenuDetailTextView(void) {
- osd->DestroyPixmap(pixmapContent);
-}
-
-void cNopacityMenuDetailTextView::SetFonts(void) {
- font = cFont::CreateFont(config.fontName, contentHeight / 25 + config.fontDetailView);
- fontHeaderLarge = NULL;
- fontHeader = NULL;
-}
-
-void cNopacityMenuDetailTextView::SetContent(void) {
- content.Set(text, font, width - 4 * border);
+void cNopacityDetailView::Action(void) {
+ InitiateViewType();
+ if (!view)
+ return;
+ view->SetGeometry(x, top, width, height, border, headerHeight);
+ view->SetFonts();
+ view->SetScrollbarPixmaps(scrollBar, scrollBarBack);
+ view->LoadMedia();
+ view->Start();
+ if (ev)
+ view->SetAdditionalInfoText(LoadReruns());
+ else if (rec)
+ view->SetAdditionalInfoText(LoadRecordingInformation());
}
-
-void cNopacityMenuDetailTextView::SetContentHeight(void) {
- int lineHeight = font->Height();
- int linesContent = content.Lines() + 1;
-
- int heightContentText = linesContent * lineHeight;
- if (heightContentText > contentHeight) {
- contentDrawPortHeight = heightContentText;
- hasScrollbar = true;
- } else {
- contentDrawPortHeight = contentHeight;
- }
-}
-
-void cNopacityMenuDetailTextView::CreatePixmaps(void) {
- pixmapContent = osd->CreatePixmap(3, cRect(x, top + headerHeight, width, contentHeight),
- cRect(0, 0, width, contentDrawPortHeight));
-
- pixmapContent->Fill(clrTransparent);
-}
-
-void cNopacityMenuDetailTextView::Render(void) {
- DrawTextWrapper(&content, 0);
-}
\ No newline at end of file
diff --git a/menudetailview.h b/menudetailview.h
index 9fae59e..4f0d2af 100644
--- a/menudetailview.h
+++ b/menudetailview.h
@@ -1,87 +1,52 @@
#ifndef __NOPACITY_MENUDETAILVIEW_H
#define __NOPACITY_MENUDETAILVIEW_H
-class cNopacityMenuDetailView {
-protected:
- cOsd *osd;
- bool hasScrollbar;
- int x, width, height, top;
- int headerHeight;
- int contentHeight;
- int contentDrawPortHeight;
- int border;
- cFont *font, *fontHeader, *fontHeaderLarge;
- cPixmap *pixmapHeader;
- cPixmap *pixmapLogo;
- cPixmap *pixmapContent;
- cTextWrapper content;
- int DrawTextWrapper(cTextWrapper *wrapper, int top);
-public:
- cNopacityMenuDetailView(cOsd *osd);
- virtual ~cNopacityMenuDetailView(void);
- void SetGeometry(int x, int width, int height, int top, int contentBorder, int headerHeight);
- virtual void SetFonts(void) = 0;
- bool Scrollable(void) {return hasScrollbar;}
- double ScrollbarSize(void);
- double Offset(void);
- bool Scroll(bool Up, bool Page);
- virtual void SetContent(void) = 0;
- virtual void SetContentHeight(void) = 0;
- virtual void CreatePixmaps(void) = 0;
- virtual void Render(void) = 0;
-};
+#include <vdr/recording.h>
+#include <vdr/skins.h>
-class cNopacityMenuDetailEventView : public cNopacityMenuDetailView {
-private:
- const cEvent *event;
- cTextWrapper reruns;
- int numEPGPics;
- void DrawHeader(void);
- void LoadReruns(void);
- int HeightEPGPics(void);
- void DrawEPGPictures(int height);
-public:
- cNopacityMenuDetailEventView(cOsd *osd, const cEvent *Event);
- virtual ~cNopacityMenuDetailEventView(void);
- void SetContent(void);
- void SetContentHeight(void);
- void CreatePixmaps(void);
- void SetFonts(void);
- void Render(void);
-};
+#include <vector>
+#include <string>
+#include <sstream>
+#include "services/scraper2vdr.h"
+#include "services/epgsearch.h"
+#include "imagecache.h"
+#include "config.h"
+#include "detailview.h"
-class cNopacityMenuDetailRecordingView : public cNopacityMenuDetailView {
-private:
- const cRecording *recording;
- const cRecordingInfo *info;
- cTextWrapper additionalInfo;
- void DrawHeader(void);
- void LoadRecordingInformation(void);
- int ReadSizeVdr(const char *strPath);
- std::vector<std::string> epgpics;
- bool LoadEPGPics(void);
- int HeightEPGPics(void);
- void DrawEPGPictures(int height);
-public:
- cNopacityMenuDetailRecordingView(cOsd *osd, const cRecording *Recording);
- virtual ~cNopacityMenuDetailRecordingView(void);
- void SetContent(void);
- void SetContentHeight(void);
- void CreatePixmaps(void);
- void SetFonts(void);
- void Render(void);
+enum eDetailViewType {
+ dvEvent = 0,
+ dvRecording,
+ dvText
};
-class cNopacityMenuDetailTextView : public cNopacityMenuDetailView {
-private:
+class cNopacityDetailView : public cThread {
+protected:
+ eDetailViewType type;
+ cOsd *osd;
+ cImageCache *imgCache;
+ const cEvent *ev;
+ const cRecording *rec;
const char *text;
+ cNopacityView *view;
+ cPixmap *scrollBar;
+ cPixmap *scrollBarBack;
+ int x, width, height, top, border;
+ int headerHeight;
+ void InitiateViewType(void);
+ std::string LoadReruns(void);
+ std::string LoadRecordingInformation(void);
+ std::string StripXmlTag(std::string &Line, const char *Tag);
+ int ReadSizeVdr(const char *strPath);
+ virtual void Action(void);
public:
- cNopacityMenuDetailTextView(cOsd *osd, const char *text);
- virtual ~cNopacityMenuDetailTextView(void);
- void SetContent(void);
- void SetContentHeight(void);
- void CreatePixmaps(void);
- void SetFonts(void);
- void Render(void);
+ cNopacityDetailView(eDetailViewType detailViewType, cOsd *osd, cImageCache *imgCache);
+ virtual ~cNopacityDetailView(void);
+ void SetGeometry(int x, int width, int height, int top, int contentBorder, int headerHeight);
+ void SetEvent(const cEvent *e) { ev = e; };
+ void SetRecording(const cRecording *r) { rec = r; };
+ void SetText(const char *t) { text = t; };
+ void SetScrollBar(cPixmap *s, cPixmap *sBack) { scrollBar = s; scrollBarBack = sBack; };
+ void KeyInput(bool Up, bool Page);
};
+
#endif //__NOPACITY_MENUDETAILVIEW_H
\ No newline at end of file
diff --git a/menuitem.c b/menuitem.c
index 8b207bd..0bf0e49 100644
--- a/menuitem.c
+++ b/menuitem.c
@@ -4,11 +4,15 @@
#include <algorithm>
#include <iostream>
#include <vector>
+#include "config.h"
+#include "helpers.h"
+#include "imageloader.h"
// cNopacityMenuItem -------------
-cNopacityMenuItem::cNopacityMenuItem(cOsd *osd, const char *text, bool sel) {
+cNopacityMenuItem::cNopacityMenuItem(cOsd *osd, cImageCache *imgCache, const char *text, bool sel) {
this->osd = osd;
+ this->imgCache = imgCache;
drawn = false;
Text = text;
selectable = sel;
@@ -17,8 +21,9 @@ cNopacityMenuItem::cNopacityMenuItem(cOsd *osd, const char *text, bool sel) {
scrollable = false;
itemTabs = NULL;
tabWidth = NULL;
- pixmapIcon = NULL;
+ pixmapStatic = NULL;
pixmapTextScroller = NULL;
+ pixmapForeground = NULL;
infoTextWindow = NULL;
}
@@ -28,13 +33,16 @@ cNopacityMenuItem::~cNopacityMenuItem(void) {
cCondWait::SleepMs(10);
delete [] itemTabs;
delete [] tabWidth;
- osd->DestroyPixmap(pixmap);
- if (pixmapIcon) {
- osd->DestroyPixmap(pixmapIcon);
+ osd->DestroyPixmap(pixmapBackground);
+ if (pixmapStatic) {
+ osd->DestroyPixmap(pixmapStatic);
}
if (pixmapTextScroller) {
osd->DestroyPixmap(pixmapTextScroller);
}
+ if (pixmapForeground) {
+ osd->DestroyPixmap(pixmapForeground);
+ }
if (infoTextWindow) {
delete infoTextWindow;
}
@@ -43,7 +51,7 @@ cNopacityMenuItem::~cNopacityMenuItem(void) {
void cNopacityMenuItem::SetCurrent(bool cur) {
wasCurrent = current;
current = cur;
-}
+}
void cNopacityMenuItem::SetGeometry(int index, int top, int left, int width, int height, int spaceMenu) {
this->index = index;
@@ -54,17 +62,21 @@ void cNopacityMenuItem::SetGeometry(int index, int top, int left, int width, int
this->spaceMenu = spaceMenu;
}
-void cNopacityMenuItem::CreatePixmap() {
- pixmap = osd->CreatePixmap(3, cRect(left, top + index * (height + spaceMenu), width, height));
+void cNopacityMenuItem::CreatePixmapBackground() {
+ pixmapBackground = osd->CreatePixmap(3, cRect(left, top + index * (height + spaceMenu), width, height));
+}
+
+void cNopacityMenuItem::CreatePixmapForeground() {
+ pixmapForeground = osd->CreatePixmap(6, cRect(left, top + index * (height + spaceMenu), width, height));
}
-void cNopacityMenuItem::CreatePixmapIcon(void) {
- pixmapIcon = osd->CreatePixmap(5, cRect(left, top + index * (height + spaceMenu), width, height));
- pixmapIcon->Fill(clrTransparent);
+void cNopacityMenuItem::CreatePixmapStatic(void) {
+ pixmapStatic = osd->CreatePixmap(5, cRect(left, top + index * (height + spaceMenu), width, height));
+ pixmapStatic->Fill(clrTransparent);
}
void cNopacityMenuItem::CreatePixmapTextScroller(int totalWidth) {
- pixmapTextScroller = osd->CreatePixmap(4, cRect(left, top + index * (height + spaceMenu), width, height), cRect(0, 0, totalWidth+10, height));
+ pixmapTextScroller = osd->CreatePixmap(4, cRect(left, top + index * (height + spaceMenu), width, height), cRect(0, 0, totalWidth, height));
pixmapTextScroller->Fill(clrTransparent);
}
@@ -78,23 +90,35 @@ void cNopacityMenuItem::SetTabs(cString *tabs, int *tabWidths, int numtabs) {
numTabs = numtabs;
}
-void cNopacityMenuItem::SetBackgrounds(int *handleBackgrounds) {
- this->handleBackgrounds = handleBackgrounds;
-}
-
-void cNopacityMenuItem::DrawDelimiter(const char *del, const char *icon, int handleBgrd) {
- pixmap->Fill(Theme.Color(clrSeparatorBorder));
- pixmap->DrawImage(cPoint(1, 1), handleBgrd);
- if (config.roundedCorners)
- DrawRoundedCorners(Theme.Color(clrSeparatorBorder));
- cImageLoader imgLoader;
+void cNopacityMenuItem::DrawDelimiter(const char *del, const char *icon, eSkinElementType seType) {
+ if ((config.GetValue("displayType") == dtBlending) && (seType != seNone)) {
+ pixmapBackground->Fill(Theme.Color(clrSeparatorBorder));
+ cImage *back = imgCache->GetSkinElement(seType);
+ if (back)
+ pixmapBackground->DrawImage(cPoint(1, 1), *back);
+ if (config.GetValue("roundedCorners"))
+ DrawRoundedCorners(Theme.Color(clrSeparatorBorder));
+ } else if ((config.GetValue("displayType") == dtGraphical) && (seType != seNone)) {
+ cImage *back = imgCache->GetSkinElement(seType);
+ if (back)
+ pixmapBackground->DrawImage(cPoint(0, 0), *back);
+ else
+ pixmapBackground->Fill(clrTransparent);
+ pixmapForeground->Fill(clrTransparent);
+ } else {
+ pixmapBackground->Fill(Theme.Color(clrSeparatorBorder));
+ pixmapBackground->DrawRectangle(cRect(1, 1, width-2, height-2), Theme.Color(clrMenuItem));
+ if (config.GetValue("roundedCorners"))
+ DrawRoundedCorners(Theme.Color(clrSeparatorBorder));
+ }
if (!drawn) {
- if (imgLoader.LoadIcon(icon, config.iconHeight)) {
- if (pixmapIcon == NULL) {
- pixmapIcon = osd->CreatePixmap(5, cRect(left, top + index * (height + spaceMenu), config.menuItemLogoWidth, config.menuItemLogoWidth));
- pixmapIcon->Fill(clrTransparent);
+ cImage *imgIcon = imgCache->GetSkinIcon(icon, height-2*geoManager->menuSpace, height-2*geoManager->menuSpace);
+ if (imgIcon) {
+ if (pixmapStatic == NULL) {
+ pixmapStatic = osd->CreatePixmap(5, cRect(left, top + index * (height + spaceMenu), width, height));
+ pixmapStatic->Fill(clrTransparent);
}
- pixmapIcon->DrawImage(cPoint(1, (height - config.iconHeight) / 2), imgLoader.GetImage());
+ pixmapStatic->DrawImage(cPoint(geoManager->menuSpace, geoManager->menuSpace), *imgIcon);
}
drawn = true;
}
@@ -105,20 +129,31 @@ void cNopacityMenuItem::DrawDelimiter(const char *del, const char *icon, int han
if (delimiter.find_last_not_of("-") != std::string::npos)
delimiter.erase(delimiter.find_last_not_of("-")+1);
} catch (...) {}
- int x = config.iconHeight + 3;
+ int x = height + 3;
int y = (height - font->Height()) / 2;
- pixmap->DrawText(cPoint(x, y), delimiter.c_str(), Theme.Color(clrMenuFontMenuItemSep), clrTransparent, font);
+ pixmapStatic->DrawText(cPoint(x, y), delimiter.c_str(), Theme.Color(clrMenuFontMenuItemSep), clrTransparent, font);
}
void cNopacityMenuItem::Action(void) {
- int scrollDelay = config.menuScrollDelay * 1000;
+ bool carriageReturn = (config.GetValue("scrollMode") == 0) ? true : false;
+ int scrollDelta = 1;
+ int scrollDelay = config.GetValue("menuScrollDelay") * 1000;
DoSleep(scrollDelay);
cPixmap::Lock();
if (Running())
SetTextFull();
cPixmap::Unlock();
int drawPortX;
- int FrameTime = config.menuScrollFrameTime;
+
+ int FrameTime = 0;
+ if (config.GetValue("menuScrollSpeed") == 1)
+ FrameTime = 50;
+ else if (config.GetValue("menuScrollSpeed") == 2)
+ FrameTime = 30;
+ else if (config.GetValue("menuScrollSpeed") == 3)
+ FrameTime = 15;
+ if (!Running())
+ return;
int maxX = pixmapTextScroller->DrawPort().Width() - pixmapTextScroller->ViewPort().Width();
bool doSleep = false;
while (Running()) {
@@ -126,14 +161,26 @@ void cNopacityMenuItem::Action(void) {
DoSleep(scrollDelay);
doSleep = false;
}
+ if (!Running())
+ return;
uint64_t Now = cTimeMs::Now();
cPixmap::Lock();
drawPortX = pixmapTextScroller->DrawPort().X();
- drawPortX -= 1;
+ drawPortX -= scrollDelta;
cPixmap::Unlock();
+
if (abs(drawPortX) > maxX) {
DoSleep(scrollDelay);
- drawPortX = 0;
+ if (carriageReturn)
+ drawPortX = 0;
+ else {
+ scrollDelta *= -1;
+ drawPortX -= scrollDelta;
+ }
+ doSleep = true;
+ }
+ if (!carriageReturn && (drawPortX == 0)) {
+ scrollDelta *= -1;
doSleep = true;
}
cPixmap::Lock();
@@ -154,52 +201,84 @@ void cNopacityMenuItem::DoSleep(int duration) {
cCondWait::SleepMs(sleepSlice);
}
-std::string cNopacityMenuItem::CutText(std::string *text, int width, const cFont *font) {
- cTextWrapper twText;
- twText.Set(text->c_str(), font, width);
- std::string cuttedTextNative = twText.GetLine(0);
- std::stringstream sstrText;
- sstrText << cuttedTextNative << "...";
- std::string cuttedText = sstrText.str();
- int actWidth = font->Width(cuttedText.c_str());
- if (actWidth > width) {
- int overlap = actWidth - width;
- int charWidth = font->Width(".");
- int cutChars = overlap / charWidth;
- if (cutChars > 0) {
- cuttedTextNative = cuttedTextNative.substr(0, cuttedTextNative.length() - cutChars);
- std::stringstream sstrText2;
- sstrText2 << cuttedTextNative << "...";
- cuttedText = sstrText2.str();
- }
- }
- return cuttedText;
-}
-
void cNopacityMenuItem::DrawRoundedCorners(tColor borderColor) {
- int radius = config.cornerRadius;
+ int radius = config.GetValue("cornerRadius");
+ if (radius < 3)
+ return;
+ pixmapBackground->DrawEllipse(cRect(0,0,radius,radius), borderColor, -2);
+ pixmapBackground->DrawEllipse(cRect(-1,-1,radius,radius), clrTransparent, -2);
- pixmap->DrawEllipse(cRect(0,0,radius,radius), borderColor, -2);
- pixmap->DrawEllipse(cRect(-1,-1,radius,radius), clrTransparent, -2);
+ pixmapBackground->DrawEllipse(cRect(width-radius,0,radius,radius), borderColor, -1);
+ pixmapBackground->DrawEllipse(cRect(width-radius+1,-1,radius,radius), clrTransparent, -1);
- pixmap->DrawEllipse(cRect(width-radius,0,radius,radius), borderColor, -1);
- pixmap->DrawEllipse(cRect(width-radius+1,-1,radius,radius), clrTransparent, -1);
+ pixmapBackground->DrawEllipse(cRect(0,height-radius,radius,radius), borderColor, -3);
+ pixmapBackground->DrawEllipse(cRect(-1,height-radius+1,radius,radius), clrTransparent, -3);
- pixmap->DrawEllipse(cRect(0,height-radius,radius,radius), borderColor, -3);
- pixmap->DrawEllipse(cRect(-1,height-radius+1,radius,radius), clrTransparent, -3);
+ pixmapBackground->DrawEllipse(cRect(width-radius,height-radius,radius,radius), borderColor, -4);
+ pixmapBackground->DrawEllipse(cRect(width-radius+1,height-radius+1,radius,radius), clrTransparent, -4);
+}
- pixmap->DrawEllipse(cRect(width-radius,height-radius,radius,radius), borderColor, -4);
- pixmap->DrawEllipse(cRect(width-radius+1,height-radius+1,radius,radius), clrTransparent, -4);
+void cNopacityMenuItem::DrawChannelLogoBackground(void) {
+ if (!config.GetValue("menuChannelLogoBackground"))
+ return;
+ int logoWidth = geoManager->menuLogoWidth;
+ pixmapBackground->DrawRectangle(cRect(4,6,logoWidth-4, height-12), Theme.Color(clrMenuChannelLogoBack));
}
// cNopacityMainMenuItem -------------
-cNopacityMainMenuItem::cNopacityMainMenuItem(cOsd *osd, const char *text, bool sel, bool setup) : cNopacityMenuItem (osd, text, sel) {
+cNopacityMainMenuItem::cNopacityMainMenuItem(cOsd *osd, cImageCache *imgCache, const char *text, bool sel, bool setup) : cNopacityMenuItem (osd, imgCache, text, sel) {
this->isSetup = setup;
}
cNopacityMainMenuItem::~cNopacityMainMenuItem(void) {
}
+void cNopacityMainMenuItem::DrawBackground(void) {
+ cImage *back = NULL;
+ if ((config.GetValue("displayType") == dtBlending) || (config.GetValue("displayType") == dtGraphical)){
+ eSkinElementType type;
+ if (!isSetup)
+ type = (current)?seMainHigh:seMain;
+ else
+ type = (current)?seSetupHigh:seSetup;
+ back = imgCache->GetSkinElement(type);
+ if (back) {
+ pixmapBackground->DrawImage(cPoint(1, 1), *back);
+ }
+ }
+ if (config.GetValue("displayType") == dtBlending) {
+ pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+ if (back) {
+ pixmapBackground->DrawImage(cPoint(1, 1), *back);
+ }
+ if (config.GetValue("roundedCorners"))
+ DrawRoundedCorners(Theme.Color(clrMenuBorder));
+ } else if (config.GetValue("displayType") == dtGraphical) {
+ if (back) {
+ pixmapBackground->DrawImage(cPoint(0, 0), *back);
+ } else {
+ pixmapBackground->Fill(clrTransparent);
+ }
+ eSkinElementType menuButtonTop;
+ if (!isSetup)
+ menuButtonTop = seMainTop;
+ else
+ menuButtonTop = seSetupTop;
+ cImage *fore = imgCache->GetSkinElement(menuButtonTop);
+ if (fore) {
+ pixmapForeground->DrawImage(cPoint(0, 0), *fore);
+ } else {
+ pixmapForeground->Fill(clrTransparent);
+ }
+ } else {
+ pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+ tColor col = (current)?Theme.Color(clrMenuItemHigh):Theme.Color(clrMenuItem);
+ pixmapBackground->DrawRectangle(cRect(1, 1, width-2, height-2), col);
+ if (config.GetValue("roundedCorners"))
+ DrawRoundedCorners(Theme.Color(clrMenuBorder));
+ }
+}
+
std::string cNopacityMainMenuItem::items[16] = { "Schedule", "Channels", "Timers", "Recordings", "Setup", "Commands",
"OSD", "EPG", "DVB", "LNB", "CAM", "Recording", "Replay", "Miscellaneous", "Plugins", "Restart"};
@@ -234,7 +313,7 @@ cString cNopacityMainMenuItem::GetIconName() {
return cString::sprintf("pluginIcons/%s", p->Name());
}
} catch (...) {}
- }
+ }
} else
break;
}
@@ -243,11 +322,11 @@ cString cNopacityMainMenuItem::GetIconName() {
void cNopacityMainMenuItem::CreatePixmapTextScroller(int totalWidth) {
int pixmapLeft = left + 10;
- if (config.useMenuIcons)
- pixmapLeft += config.iconHeight;
+ if (config.GetValue("useMenuIcons"))
+ pixmapLeft += geoManager->menuMainMenuIconSize;
int pixmapWidth = width - 10;
- if (config.useMenuIcons)
- pixmapWidth -= config.iconHeight;
+ if (config.GetValue("useMenuIcons"))
+ pixmapWidth -= geoManager->menuMainMenuIconSize;
int drawPortWidth = totalWidth + 10;
pixmapTextScroller = osd->CreatePixmap(4, cRect(pixmapLeft, top + index * (height + spaceMenu), pixmapWidth, height), cRect(0, 0, drawPortWidth, height));
pixmapTextScroller->Fill(clrTransparent);
@@ -269,7 +348,7 @@ void cNopacityMainMenuItem::CreateText() {
if (found) {
if (!(s >= '0' && s <= '9')) {
doBreak = true;
- }
+ }
}
if (s >= '0' && s <= '9') {
found = true;
@@ -284,7 +363,7 @@ void cNopacityMainMenuItem::CreateText() {
menuEntry = skipspace(text.substr(i).c_str());
} else {
menuNumber = "";
- menuEntry = text.c_str();
+ menuEntry = text.c_str();
}
strEntry = *menuEntry;
}
@@ -292,7 +371,7 @@ void cNopacityMainMenuItem::CreateText() {
int cNopacityMainMenuItem::CheckScrollable(bool hasIcon) {
int spaceLeft = spaceMenu;
if (hasIcon)
- spaceLeft += config.iconHeight;
+ spaceLeft += geoManager->menuMainMenuIconSize;
int totalTextWidth = width - spaceLeft;
int numberWidth = font->Width("xxx");
int textWidth = font->Width(*menuEntry);
@@ -300,7 +379,7 @@ int cNopacityMainMenuItem::CheckScrollable(bool hasIcon) {
scrollable = true;
totalTextWidth = max(numberWidth + textWidth, totalTextWidth);
strEntryFull = strEntry.c_str();
- strEntry = CutText(&strEntry, width - spaceLeft - numberWidth, font);
+ strEntry = CutText(strEntry, width - spaceLeft - numberWidth, font);
}
return totalTextWidth;
}
@@ -328,28 +407,19 @@ void cNopacityMainMenuItem::SetTextShort(void) {
}
void cNopacityMainMenuItem::Render() {
- pixmap->Fill(Theme.Color(clrMenuBorder));
- int handleBgrd;
- if (!isSetup)
- handleBgrd = (current)?handleBackgrounds[3]:handleBackgrounds[2];
- else
- handleBgrd = (current)?handleBackgrounds[13]:handleBackgrounds[12];
- pixmap->DrawImage(cPoint(1, 1), handleBgrd);
- if (config.roundedCorners)
- DrawRoundedCorners(Theme.Color(clrMenuBorder));
+ DrawBackground();
if (selectable) {
- if (config.useMenuIcons) {
+ if (config.GetValue("useMenuIcons")) {
cString cIcon = GetIconName();
if (!drawn) {
- cImageLoader imgLoader;
- if (imgLoader.LoadIcon(*cIcon, config.iconHeight)) {
- pixmapIcon->DrawImage(cPoint(1, 1), imgLoader.GetImage());
- }
+ cImage *imgIcon = imgCache->GetMenuIcon(*cIcon);
+ if (imgIcon)
+ pixmapStatic->DrawImage(cPoint(geoManager->menuSpace, geoManager->menuSpace), *imgIcon);
drawn = true;
}
}
SetTextShort();
- if (current && scrollable && !Running() && config.menuScrollSpeed) {
+ if (current && scrollable && !Running() && config.GetValue("menuScrollSpeed")) {
Start();
}
if (wasCurrent && !current && scrollable && Running()) {
@@ -358,18 +428,19 @@ void cNopacityMainMenuItem::Render() {
Cancel(-1);
}
} else {
- DrawDelimiter(*itemTabs[1], "skinIcons/Channelseparator", handleBgrd);
+ DrawDelimiter(strEntry.c_str(), "skinIcons/channeldelimiter", (config.GetValue("displayType") != dtFlat)?seNone:(isSetup?seSetup:seMain));
}
}
// cNopacityScheduleMenuItem -------------
-cNopacityScheduleMenuItem::cNopacityScheduleMenuItem(cOsd *osd, const cEvent *Event, const cChannel *Channel, eTimerMatch TimerMatch, bool sel, eMenuCategory category)
-: cNopacityMenuItem (osd, "", sel) {
+cNopacityScheduleMenuItem::cNopacityScheduleMenuItem(cOsd *osd, cImageCache *imgCache, const cEvent *Event, const cChannel *Channel, eTimerMatch TimerMatch, bool sel, eMenuCategory category, cRect *vidWin)
+ : cNopacityMenuItem (osd, imgCache, "", sel) {
this->category = category;
this->Event = Event;
this->Channel = Channel;
this->TimerMatch = TimerMatch;
+ this->vidWin = vidWin;
strDateTime = "";
strTitle = "";
strSubTitle = "";
@@ -387,8 +458,8 @@ void cNopacityScheduleMenuItem::CreatePixmapTextScroller(int totalWidth) {
int pixmapLeft = left;
int pixmapWidth = width;
if (Channel) {
- pixmapLeft += config.menuItemLogoWidth + 5;
- pixmapWidth = pixmapWidth - config.menuItemLogoWidth - 5;
+ pixmapLeft += geoManager->menuLogoWidth + geoManager->menuSpace;
+ pixmapWidth = pixmapWidth - geoManager->menuLogoWidth - geoManager->menuSpace;
}
pixmapTextScroller = osd->CreatePixmap(4, cRect(pixmapLeft, top + index * (height + spaceMenu), pixmapWidth, height), cRect(0, 0, drawPortWidth, height));
pixmapTextScroller->Fill(clrTransparent);
@@ -402,7 +473,7 @@ void cNopacityScheduleMenuItem::CreateText() {
std::string dayNow = *WeekDayName(now);
std::string dayEvent = *WeekDayName(Event->StartTime());
if ((Event->StartTime() - now > 86400) || (dayNow != dayEvent))
- sstrDateTime << dayEvent << " ";
+ sstrDateTime << dayEvent << " " << *ShortDateString(Event->StartTime()) << " ";
sstrDateTime << *Event->GetTimeString();
sstrDateTime << " - " << *Event->GetEndTimeString();
strDateTime = sstrDateTime.str();
@@ -415,7 +486,7 @@ void cNopacityScheduleMenuItem::CreateText() {
int cNopacityScheduleMenuItem::CheckScrollable(bool hasIcon) {
int spaceLeft = spaceMenu;
if (hasIcon)
- spaceLeft += config.menuItemLogoWidth;
+ spaceLeft += geoManager->menuLogoWidth;
int totalTextWidth = width - spaceLeft;
if (font->Width(strTitle.c_str()) > (width - spaceLeft)) {
scrollable = true;
@@ -423,7 +494,7 @@ int cNopacityScheduleMenuItem::CheckScrollable(bool hasIcon) {
totalTextWidth = max(font->Width(strTitle.c_str()), totalTextWidth);
strTitleFull = strTitle.c_str();
strSubTitleFull = strSubTitle.c_str();
- strTitle = CutText(&strTitle, width - spaceLeft, font);
+ strTitle = CutText(strTitle, width - spaceLeft, font);
}
if (fontSmall->Width(strSubTitle.c_str()) > (width - spaceLeft)) {
if (!scrollable) {
@@ -433,7 +504,7 @@ int cNopacityScheduleMenuItem::CheckScrollable(bool hasIcon) {
}
scrollSubTitle = true;
totalTextWidth = max(fontSmall->Width(strSubTitle.c_str()), totalTextWidth);
- strSubTitle = CutText(&strSubTitle, width - spaceLeft, fontSmall);
+ strSubTitle = CutText(strSubTitle, width - spaceLeft, fontSmall);
}
return totalTextWidth;
@@ -454,22 +525,27 @@ void cNopacityScheduleMenuItem::SetTextShort(void) {
}
void cNopacityScheduleMenuItem::Render() {
- int logoWidth = config.menuItemLogoWidth;
- int logoHeight = config.menuItemLogoHeight;
+ int logoWidth = geoManager->menuLogoWidth;
+ int logoHeight = geoManager->menuLogoHeight;
textLeft = 5;
if (Channel && Channel->Name())
textLeft = logoWidth + 10;
-
+
if (selectable) {
titleY = (height - font->Height())/2 - 2;
DrawBackground(textLeft);
- DrawRemaining(textLeft, height*7/8, width - textLeft - 10);
+ if (Channel && Channel->Name())
+ DrawChannelLogoBackground();
+ int progressBarDelta = 0;
+ if (config.GetValue("displayType") == dtGraphical && textLeft < 20)
+ progressBarDelta = 10;
+ DrawRemaining(textLeft + progressBarDelta, height*7/8, width - textLeft - 20 - progressBarDelta);
if (!drawn) {
DrawLogo(logoWidth, logoHeight);
drawn = true;
}
SetTextShort();
- if (current && scrollable && !Running() && config.menuScrollSpeed) {
+ if (current && scrollable && !Running() && config.GetValue("menuScrollSpeed")) {
Start();
}
if (wasCurrent && !current && scrollable && Running()) {
@@ -483,45 +559,79 @@ void cNopacityScheduleMenuItem::Render() {
infoTextWindow = NULL;
}
if (current && Event) {
- infoTextWindow = new cNopacityTextWindow(osd, fontEPGWindow);
- infoTextWindow->SetGeometry(textWindow);
- infoTextWindow->SetText(Event->Description());
- infoTextWindow->Start();
+ if (config.GetValue("menuSchedulesWindowMode") == 0) {
+ //window mode
+ infoTextWindow = new cNopacityTextWindow(osd, fontEPGWindow, vidWin);
+ infoTextWindow->SetGeometry(textWindow);
+ infoTextWindow->SetText(Event->Description());
+ infoTextWindow->SetPoster(Event, NULL);
+ infoTextWindow->Start();
+ } else {
+ //fullscreen mode
+ infoTextWindow = new cNopacityTextWindow(osd, fontEPGWindow, fontEPGWindowLarge);
+ infoTextWindow->SetGeometry(textWindow);
+ infoTextWindow->SetPoster(Event, NULL, true);
+ infoTextWindow->SetEvent(Event);
+ }
}
} else {
if (Event) {
- DrawDelimiter(Event->Title(), "skinIcons/daydelimiter", handleBackgrounds[4]);
+ DrawDelimiter(Event->Title(), "skinIcons/daydelimiter", (config.GetValue("displayType")!=dtFlat)?seSchedules:seNone);
} else if (Channel) {
- DrawDelimiter(Channel->Name(), "skinIcons/Channelseparator", handleBackgrounds[4]);
+ DrawDelimiter(Channel->Name(), "skinIcons/channeldelimiter", (config.GetValue("displayType")!=dtFlat)?seSchedules:seNone);
}
}
}
void cNopacityScheduleMenuItem::DrawBackground(int textLeft) {
- int handleBgrd = (current)?handleBackgrounds[5]:handleBackgrounds[4];
- pixmap->Fill(Theme.Color(clrMenuBorder));
- pixmap->DrawImage(cPoint(1, 1), handleBgrd);
- pixmap->DrawText(cPoint(textLeft, 3), strDateTime.c_str(), Theme.Color(clrMenuFontMenuItem), clrTransparent, font);
- if (config.roundedCorners)
- DrawRoundedCorners(Theme.Color(clrMenuBorder));
- if (TimerMatch == tmFull) {
- cImageLoader imgLoader;
- if (imgLoader.LoadIcon("skinIcons/activetimer", 64, 64)) {
- pixmapIcon->DrawImage(cPoint(width - 66, 2), imgLoader.GetImage());
+ eSkinElementType type = (current)?seSchedulesHigh:seSchedules;
+ if (config.GetValue("displayType") == dtBlending) {
+ pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+ cImage *back = imgCache->GetSkinElement(type);
+ if (back)
+ pixmapBackground->DrawImage(cPoint(1, 1), *back);
+ if (config.GetValue("roundedCorners"))
+ DrawRoundedCorners(Theme.Color(clrMenuBorder));
+ } else if (config.GetValue("displayType") == dtGraphical) {
+ cImage *back = imgCache->GetSkinElement(type);
+ if (back) {
+ pixmapBackground->DrawImage(cPoint(0, 0), *back);
+ } else {
+ pixmapBackground->Fill(clrTransparent);
}
- } else if (TimerMatch == tmPartial) {
- cImageLoader imgLoader;
- if (imgLoader.LoadIcon("skinIcons/activetimersmall", 32, 32)) {
- pixmapIcon->DrawImage(cPoint(width - 34, 2), imgLoader.GetImage());
+ cImage *fore = imgCache->GetSkinElement(seSchedulesTop);
+ if (fore) {
+ pixmapForeground->DrawImage(cPoint(0, 0), *fore);
+ } else {
+ pixmapForeground->Fill(clrTransparent);
}
+ } else {
+ pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+ tColor col = (current)?Theme.Color(clrMenuItemHigh):Theme.Color(clrMenuItem);
+ pixmapBackground->DrawRectangle(cRect(1, 1, width-2, height-2), col);
+ if (config.GetValue("roundedCorners"))
+ DrawRoundedCorners(Theme.Color(clrMenuBorder));
}
+
+ if (TimerMatch == tmFull) {
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/activetimer", 64, 64);
+ if (imgIcon)
+ pixmapStatic->DrawImage(cPoint(width - 66, 2), *imgIcon);
+ } else if (TimerMatch == tmPartial) {
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/activetimersmall", 32, 32);
+ if (imgIcon)
+ pixmapStatic->DrawImage(cPoint(width - 34, 2), *imgIcon);
+
+ }
+ tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
+ pixmapStatic->DrawText(cPoint(textLeft, 3), strDateTime.c_str(), clrFont, clrTransparent, font);
}
void cNopacityScheduleMenuItem::DrawLogo(int logoWidth, int logoHeight) {
if (Channel && Channel->Name()) {
- cImageLoader imgLoader;
- if (imgLoader.LoadLogo(Channel->Name(), logoWidth, logoHeight)) {
- pixmapIcon->DrawImage(cPoint(1, 1), imgLoader.GetImage());
+ cImage *logo = imgCache->GetLogo(ctLogoMenuItem, Channel);
+ if (logo) {
+ pixmapStatic->DrawImage(cPoint(1,1), *logo);
} else {
cTextWrapper channel;
channel.Set(Channel->Name(), font, logoWidth);
@@ -530,8 +640,8 @@ void cNopacityScheduleMenuItem::DrawLogo(int logoWidth, int logoHeight) {
int heightChannel = lines * lineHeight;
int y = (heightChannel>height)?0:(height-heightChannel)/2;
for (int line = 0; line < lines; line++) {
- pixmapIcon->DrawText(cPoint((logoWidth - font->Width(channel.GetLine(line)))/2, y+lineHeight*line), channel.GetLine(line), Theme.Color(clrMenuFontMenuItemHigh), clrTransparent, font);
- }
+ pixmapStatic->DrawText(cPoint((logoWidth - font->Width(channel.GetLine(line)))/2, y+lineHeight*line), channel.GetLine(line), Theme.Color(clrMenuFontMenuItemHigh), clrTransparent, font);
+ }
}
}
}
@@ -547,27 +657,39 @@ void cNopacityScheduleMenuItem::DrawRemaining(int x, int y, int width) {
if (total == 0)
return;
double percentSeen = (double)seen/total;
- pixmap->DrawEllipse(cRect(x, y, 7, 7), Theme.Color(clrProgressBarBack));
- pixmap->DrawEllipse(cRect(x+width, y, 7, 7), Theme.Color(clrProgressBarBack));
- pixmap->DrawRectangle(cRect(x+4, y, width-1, 7), Theme.Color(clrProgressBarBack));
- pixmap->DrawEllipse(cRect(x+1, y+1, 5, 5), Theme.Color(clrProgressBar));
+
+ tColor clrBack = (current)?Theme.Color(clrProgressBarBackHigh):Theme.Color(clrProgressBarBack);
+ tColor clrBar = (current)?Theme.Color(clrProgressBarHigh):Theme.Color(clrProgressBar);
+ pixmapBackground->DrawEllipse(cRect(x, y, 7, 7), clrBack);
+ pixmapBackground->DrawEllipse(cRect(x+width, y, 7, 7), clrBack);
+ pixmapBackground->DrawRectangle(cRect(x+4, y, width-1, 7), clrBack);
+ pixmapBackground->DrawEllipse(cRect(x+1, y+1, 5, 5), clrBar);
+
if (percentSeen > 0.0)
- pixmap->DrawEllipse(cRect(x+(width*percentSeen), y+1, 5, 5), Theme.Color(clrProgressBar));
- pixmap->DrawRectangle(cRect(x+4, y+1, (width-1)*percentSeen, 5), Theme.Color(clrProgressBar));
+ pixmapBackground->DrawEllipse(cRect(x+(width*percentSeen), y+1, 5, 5), clrBar);
+ pixmapBackground->DrawRectangle(cRect(x+4, y+1, (width-1)*percentSeen, 5), clrBar);
}
// cNopacityChannelMenuItem -------------
-cNopacityChannelMenuItem::cNopacityChannelMenuItem(cOsd *osd, const cChannel *Channel, bool sel) : cNopacityMenuItem (osd, "", sel) {
+cNopacityChannelMenuItem::cNopacityChannelMenuItem(cOsd *osd, cImageCache *imgCache, const cChannel *Channel, bool sel, cRect *vidWin) : cNopacityMenuItem (osd, imgCache, "", sel) {
this->Channel = Channel;
+ this->vidWin = vidWin;
+ strEntry = "";
+ strEntryFull = "";
+ strChannelSource = "";
+ strChannelInfo = "";
+ strEpgInfo = "";
+ strEpgInfoFull = "";
+ strTimeInfo = "";
}
cNopacityChannelMenuItem::~cNopacityChannelMenuItem(void) {
}
void cNopacityChannelMenuItem::CreatePixmapTextScroller(int totalWidth) {
- int pixmapLeft = left + config.menuItemLogoWidth + 10;
- int pixmapWidth = width - config.menuItemLogoWidth - 10;
+ int pixmapLeft = left + geoManager->menuLogoWidth + geoManager->menuSpace;
+ int pixmapWidth = width - geoManager->menuLogoWidth - geoManager->menuSpace;
int drawPortWidth = totalWidth + 10;
pixmapTextScroller = osd->CreatePixmap(4, cRect(pixmapLeft, top + index * (height + spaceMenu), pixmapWidth, height), cRect(0, 0, drawPortWidth, height));
pixmapTextScroller->Fill(clrTransparent);
@@ -575,77 +697,206 @@ void cNopacityChannelMenuItem::CreatePixmapTextScroller(int totalWidth) {
void cNopacityChannelMenuItem::CreateText() {
strEntry = cString::sprintf("%d %s", Channel->Number(), Channel->Name());
- const cSource *source = Sources.Get(Channel->Source());
- if (source)
- strChannelSource = cString::sprintf("%s - %s", *cSource::ToString(source->Code()), source->Description());
- else
- strChannelSource = "";
- strChannelInfo = cString::sprintf("%s %d, %d MHz", tr("Transp."), Channel->Transponder(), Channel->Frequency());
+ if (config.GetValue("menuChannelDisplayMode") == 0) {
+ const cSource *source = Sources.Get(Channel->Source());
+ if (source)
+ strChannelSource = cString::sprintf("%s - %s", *cSource::ToString(source->Code()), source->Description());
+ else
+ strChannelSource = "";
+ strChannelInfo = cString::sprintf("%s %d, %d MHz", tr("Transp."), Channel->Transponder(), Channel->Frequency()/1000);
+ } else {
+ readCurrentEPG();
+ }
}
int cNopacityChannelMenuItem::CheckScrollable(bool hasIcon) {
int spaceLeft = spaceMenu;
if (hasIcon)
- spaceLeft += config.menuItemLogoWidth;
+ spaceLeft += geoManager->menuLogoWidth;
int totalTextWidth = width - spaceLeft;
if (font->Width(strEntry.c_str()) > (width - spaceLeft)) {
scrollable = true;
totalTextWidth = max(font->Width(strEntry.c_str()), totalTextWidth);
strEntryFull = strEntry.c_str();
- strEntry = CutText(&strEntry, width - spaceLeft, font);
- }
+ strEntry = CutText(strEntry, width - spaceLeft, font);
+ } else
+ strEntryFull = strEntry;
+
+ if (fontSmall->Width(strEpgInfo.c_str()) > (width - spaceLeft)) {
+ scrollable = true;
+ totalTextWidth = max(fontSmall->Width(strEpgInfo.c_str()), totalTextWidth);
+ strEpgInfoFull = strEpgInfo.c_str();
+ strEpgInfo = CutText(strEpgInfo, width - spaceLeft, fontSmall);
+ } else
+ strEpgInfoFull = strEpgInfo;
+
return totalTextWidth;
}
void cNopacityChannelMenuItem::SetTextFull(void) {
tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
pixmapTextScroller->Fill(clrTransparent);
- pixmapTextScroller->DrawText(cPoint(5, (height/2 - font->Height())/2), strEntryFull.c_str(), clrFont, clrTransparent, font);
+ int heightChannelName = 0;
+ if (config.GetValue("menuChannelDisplayMode") == 2) {
+ heightChannelName = (height - font->Height())/2;
+ } else {
+ heightChannelName = (height/2 - font->Height())/2;
+ }
+ pixmapTextScroller->DrawText(cPoint(5, heightChannelName), strEntryFull.c_str(), clrFont, clrTransparent, font);
+ if (config.GetValue("menuChannelDisplayMode") == 1) {
+ int heightTimeInfo = 0;
+ int heightEPGInfo = 0;
+ if (config.GetValue("menuChannelDisplayTime")) {
+ heightTimeInfo = height/2 + (height/4 - fontSmall->Height())/2;
+ heightEPGInfo = 3*height/4 + (height/4 - fontSmall->Height())/2;
+ } else {
+ heightEPGInfo = height/2 + (height/4 - fontSmall->Height())/2;
+ }
+ if (config.GetValue("menuChannelDisplayTime")) {
+ pixmapTextScroller->DrawText(cPoint(5, heightTimeInfo), strTimeInfo.c_str(), clrFont, clrTransparent, fontSmall);
+ }
+ pixmapTextScroller->DrawText(cPoint(5, heightEPGInfo), strEpgInfoFull.c_str(), clrFont, clrTransparent, fontSmall);
+ }
}
void cNopacityChannelMenuItem::SetTextShort(void) {
tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
pixmapTextScroller->Fill(clrTransparent);
- pixmapTextScroller->DrawText(cPoint(5, (height/2 - font->Height())/2), strEntry.c_str(), clrFont, clrTransparent, font);
-}
-
-void cNopacityChannelMenuItem::DrawBackground(int handleBackground) {
- pixmap->Fill(Theme.Color(clrMenuBorder));
- pixmap->DrawImage(cPoint(1, 1), handleBackground);
- if (config.roundedCorners)
- DrawRoundedCorners(Theme.Color(clrMenuBorder));
-
- int encryptedSize = height/4-2;
- int sourceX = config.menuItemLogoWidth + 15;
-
- pixmap->DrawText(cPoint(sourceX, 3*height/4 + (height/4 - fontSmall->Height())/2), *strChannelInfo, Theme.Color(clrMenuFontMenuItem), clrTransparent, fontSmall);
- if (Channel->Ca()) {
- cImageLoader imgLoader;
- if (imgLoader.LoadIcon("skinIcons/encrypted", encryptedSize)) {
- pixmapIcon->DrawImage(cPoint(sourceX, height/2+1), imgLoader.GetImage());
- sourceX += encryptedSize + 10;
+ int heightChannelName = 0;
+ if (config.GetValue("menuChannelDisplayMode") == 2) {
+ heightChannelName = (height - font->Height())/2;
+ } else {
+ heightChannelName = (height/2 - font->Height())/2;
+ }
+ pixmapTextScroller->DrawText(cPoint(5, heightChannelName), strEntry.c_str(), clrFont, clrTransparent, font);
+ if (config.GetValue("menuChannelDisplayMode") == 1) {
+ int heightTimeInfo = 0;
+ int heightEPGInfo = 0;
+ if (config.GetValue("menuChannelDisplayTime")) {
+ heightTimeInfo = height/2 + (height/4 - fontSmall->Height())/2;
+ heightEPGInfo = 3*height/4 + (height/4 - fontSmall->Height())/2;
+ } else {
+ heightEPGInfo = height/2 + (height/4 - fontSmall->Height())/2;
+ }
+ if (config.GetValue("menuChannelDisplayTime")) {
+ pixmapTextScroller->DrawText(cPoint(5, heightTimeInfo), strTimeInfo.c_str(), clrFont, clrTransparent, fontSmall);
}
+ pixmapTextScroller->DrawText(cPoint(5, heightEPGInfo), strEpgInfo.c_str(), clrFont, clrTransparent, fontSmall);
}
- pixmap->DrawText(cPoint(sourceX, height/2 + (height/4 - fontSmall->Height())/2), *strChannelSource, Theme.Color(clrMenuFontMenuItem), clrTransparent, fontSmall);
+}
+
+void cNopacityChannelMenuItem::DrawBackground(void) {
+ eSkinElementType type = (current)?seChannelsHigh:seChannels;
+ if (config.GetValue("displayType") == dtBlending) {
+ pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+ cImage *back = imgCache->GetSkinElement(type);
+ if (back)
+ pixmapBackground->DrawImage(cPoint(1, 1), *back);
+ if (config.GetValue("roundedCorners"))
+ DrawRoundedCorners(Theme.Color(clrMenuBorder));
+ } else if (config.GetValue("displayType") == dtGraphical) {
+ cImage *back = imgCache->GetSkinElement(type);
+ if (back) {
+ pixmapBackground->DrawImage(cPoint(0, 0), *back);
+ } else {
+ pixmapBackground->Fill(clrTransparent);
+ }
+ cImage *fore = imgCache->GetSkinElement(seChannelsTop);
+ if (fore) {
+ pixmapForeground->DrawImage(cPoint(0, 0), *fore);
+ } else {
+ pixmapForeground->Fill(clrTransparent);
+ }
+ } else {
+ pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+ tColor col = (current)?Theme.Color(clrMenuItemHigh):Theme.Color(clrMenuItem);
+ pixmapBackground->DrawRectangle(cRect(1, 1, width-2, height-2), col);
+ if (config.GetValue("roundedCorners"))
+ DrawRoundedCorners(Theme.Color(clrMenuBorder));
+ }
+
+ if (config.GetValue("menuChannelDisplayMode") == 0) {
+ int encryptedSize = height/4-2;
+ int sourceX = geoManager->menuLogoWidth + 15;
+ tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
+ pixmapStatic->DrawText(cPoint(sourceX, 3*height/4 + (height/4 - fontSmall->Height())/2), *strChannelInfo, clrFont, clrTransparent, fontSmall);
+ if (Channel->Ca()) {
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/encrypted", encryptedSize, encryptedSize);
+ if (imgIcon) {
+ pixmapStatic->DrawImage(cPoint(sourceX, height/2+1), *imgIcon);
+ sourceX += encryptedSize + 10;
+ }
+ }
+ pixmapStatic->DrawText(cPoint(sourceX, height/2 + (height/4 - fontSmall->Height())/2), *strChannelSource, clrFont, clrTransparent, fontSmall);
+ }
+}
+
+void cNopacityChannelMenuItem::readCurrentEPG(void) {
+ cSchedulesLock schedulesLock;
+ const cSchedules *schedules = cSchedules::Schedules(schedulesLock);
+ const cSchedule *Schedule = NULL;
+ Schedule = schedules->GetSchedule(Channel);
+ if (!Schedule) {
+ strEpgInfo = tr("No EPG Information found");
+ strTimeInfo = "";
+ } else {
+ const cEvent *PresentEvent = Schedule->GetPresentEvent();
+ if (!PresentEvent) {
+ strEpgInfo = tr("No EPG Information found");
+ strTimeInfo = "";
+ } else {
+ strEpgInfo = PresentEvent->Title();
+ strTimeInfo = *cString::sprintf("%s - %s:", *PresentEvent->GetTimeString(), *PresentEvent->GetEndTimeString());
+ }
+ }
+}
+
+std::string cNopacityChannelMenuItem::readEPG(void) {
+ std::stringstream sstrText;
+ cSchedulesLock schedulesLock;
+ const cSchedules *schedules = cSchedules::Schedules(schedulesLock);
+ const cSchedule *Schedule = NULL;
+ Schedule = schedules->GetSchedule(Channel);
+ if (!Schedule) {
+ sstrText << tr("No EPG Information found");
+ } else {
+ const cEvent *PresentEvent = Schedule->GetPresentEvent();
+ int i=0;
+ if (!PresentEvent) {
+ sstrText << tr("No EPG Information found");
+ } else {
+ for (const cEvent *event = PresentEvent; event; event = Schedule->Events()->Next(event)) {
+ if (event) {
+ sstrText << *event->GetTimeString();
+ sstrText << " ";
+ sstrText << event->Title();
+ if (event->ShortText() && (strlen(event->ShortText()) > 1))
+ sstrText << " ~ " << event->ShortText();
+ i++;
+ if (i < config.GetValue("numEPGEntriesChannelsMenu"))
+ sstrText << "\n";
+ else
+ break;
+ }
+ }
+ }
+ }
+ return sstrText.str();
}
void cNopacityChannelMenuItem::Render() {
-
- int handleBgrd = (current)?handleBackgrounds[7]:handleBackgrounds[6];
-
if (selectable) { //Channels
- DrawBackground(handleBgrd);
- int logoWidth = config.menuItemLogoWidth;
- int logoHeight = config.menuItemLogoHeight;
+ DrawBackground();
+ DrawChannelLogoBackground();
if (!drawn) {
- cImageLoader imgLoader;
- if (imgLoader.LoadLogo(Channel->Name(), logoWidth, logoHeight)) {
- pixmapIcon->DrawImage(cPoint(1, 1), imgLoader.GetImage());
+ cImage *logo = imgCache->GetLogo(ctLogoMenuItem, Channel);
+ if (logo) {
+ pixmapStatic->DrawImage(cPoint(1,1), *logo);
}
drawn = true;
}
SetTextShort();
- if (current && scrollable && !Running() && config.menuScrollSpeed) {
+ if (current && scrollable && !Running() && config.GetValue("menuScrollSpeed")) {
Start();
}
if (wasCurrent && !current && scrollable && Running()) {
@@ -653,23 +904,35 @@ void cNopacityChannelMenuItem::Render() {
SetTextShort();
Cancel(-1);
}
+ if (wasCurrent)
+ if (infoTextWindow) {
+ delete infoTextWindow;
+ infoTextWindow = NULL;
+ }
+ if (current && Channel && (config.GetValue("menuChannelDisplayMode") == 0)) {
+ infoTextWindow = new cNopacityTextWindow(osd, fontEPGWindow, vidWin);
+ infoTextWindow->SetGeometry(textWindow);
+ infoTextWindow->SetText(readEPG().c_str());
+ infoTextWindow->Start();
+ }
} else { //Channelseparators
- DrawDelimiter(Channel->Name(), "skinIcons/Channelseparator", handleBgrd);
+ DrawDelimiter(Channel->Name(), "skinIcons/channeldelimiter", (config.GetValue("displayType")!=dtFlat )?seChannels:seNone);
}
}
// cNopacityTimerMenuItem -------------
-cNopacityTimerMenuItem::cNopacityTimerMenuItem(cOsd *osd, const cTimer *Timer, bool sel) : cNopacityMenuItem (osd, "", sel) {
+cNopacityTimerMenuItem::cNopacityTimerMenuItem(cOsd *osd, cImageCache *imgCache, const cTimer *Timer, bool sel, cRect *vidWin) : cNopacityMenuItem (osd, imgCache, "", sel) {
this->Timer = Timer;
+ this->vidWin = vidWin;
}
cNopacityTimerMenuItem::~cNopacityTimerMenuItem(void) {
}
void cNopacityTimerMenuItem::CreatePixmapTextScroller(int totalWidth) {
- int pixmapLeft = left + config.menuItemLogoWidth + 10;
- int pixmapWidth = width - config.menuItemLogoWidth - 10;
+ int pixmapLeft = left + geoManager->menuLogoWidth + geoManager->menuSpace;
+ int pixmapWidth = width - geoManager->menuLogoWidth - geoManager->menuSpace;
int drawPortWidth = totalWidth + 10;
pixmapTextScroller = osd->CreatePixmap(4, cRect(pixmapLeft, top + index * (height + spaceMenu), pixmapWidth, height), cRect(0, 0, drawPortWidth, height));
pixmapTextScroller->Fill(clrTransparent);
@@ -700,19 +963,24 @@ std::string cNopacityTimerMenuItem::CreateDate(void) {
strftime(buffer, sizeof(buffer), "%Y%m%d", &tm_r);
day = buffer;
}
- return *cString::sprintf("%s%s%s (%02d:%02d-%02d:%02d)", *dayName, *dayName && **dayName ? " " : "", *day, Timer->Start() / 100, Timer->Start() % 100, Timer->Stop() / 100, Timer->Stop() % 100);
+ cString dateString;
+ if (Timer->Channel())
+ dateString = *cString::sprintf("%d - %s%s%s (%02d:%02d-%02d:%02d)", Timer->Channel()->Number(), *dayName, *dayName && **dayName ? " " : "", *day, Timer->Start() / 100, Timer->Start() % 100, Timer->Stop() / 100, Timer->Stop() % 100);
+ else
+ dateString = *cString::sprintf("%s%s%s (%02d:%02d-%02d:%02d)", *dayName, *dayName && **dayName ? " " : "", *day, Timer->Start() / 100, Timer->Start() % 100, Timer->Stop() / 100, Timer->Stop() % 100);
+ return *dateString;
}
int cNopacityTimerMenuItem::CheckScrollable(bool hasIcon) {
int spaceLeft = spaceMenu;
if (hasIcon)
- spaceLeft += config.menuItemLogoWidth;
+ spaceLeft += geoManager->menuLogoWidth;
int totalTextWidth = width - spaceLeft;
if (font->Width(strEntry.c_str()) > (width - spaceLeft)) {
scrollable = true;
totalTextWidth = max(font->Width(strEntry.c_str()), totalTextWidth);
strEntryFull = strEntry.c_str();
- strEntry = CutText(&strEntry, width - spaceLeft, font);
+ strEntry = CutText(strEntry, width - spaceLeft, font);
}
return totalTextWidth;
}
@@ -729,11 +997,35 @@ void cNopacityTimerMenuItem::SetTextShort(void) {
pixmapTextScroller->DrawText(cPoint(0, height/2 + (height/2 - font->Height())/2), strEntry.c_str(), clrFont, clrTransparent, font);
}
-void cNopacityTimerMenuItem::DrawBackground(int handleBackground, int textLeft) {
- pixmap->Fill(Theme.Color(clrMenuBorder));
- pixmap->DrawImage(cPoint(1, 1), handleBackground);
- if (config.roundedCorners)
- DrawRoundedCorners(Theme.Color(clrMenuBorder));
+void cNopacityTimerMenuItem::DrawBackground(int textLeft) {
+ eSkinElementType type = (current)?seTimersHigh:seTimers;
+ if (config.GetValue("displayType") == dtBlending) {
+ pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+ cImage *back = imgCache->GetSkinElement(type);
+ if (back)
+ pixmapBackground->DrawImage(cPoint(1, 1), *back);
+ if (config.GetValue("roundedCorners"))
+ DrawRoundedCorners(Theme.Color(clrMenuBorder));
+ } else if (config.GetValue("displayType") == dtGraphical) {
+ cImage *back = imgCache->GetSkinElement(type);
+ if (back) {
+ pixmapBackground->DrawImage(cPoint(0, 0), *back);
+ } else {
+ pixmapBackground->Fill(clrTransparent);
+ }
+ cImage *fore = imgCache->GetSkinElement(seTimersTop);
+ if (fore) {
+ pixmapForeground->DrawImage(cPoint(0, 0), *fore);
+ } else {
+ pixmapForeground->Fill(clrTransparent);
+ }
+ } else {
+ pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+ tColor col = (current)?Theme.Color(clrMenuItemHigh):Theme.Color(clrMenuItem);
+ pixmapBackground->DrawRectangle(cRect(1, 1, width-2, height-2), col);
+ if (config.GetValue("roundedCorners"))
+ DrawRoundedCorners(Theme.Color(clrMenuBorder));
+ }
int iconSize = height/2;
cString iconName("");
bool firstDay = false;
@@ -744,35 +1036,36 @@ void cNopacityTimerMenuItem::DrawBackground(int handleBackground, int textLeft)
firstDay = true;
} else if (Timer->Recording())
iconName = "skinIcons/timerRecording";
- else
+ else
iconName = "skinIcons/timerActive";
-
- cImageLoader imgLoader;
- if (imgLoader.LoadIcon(iconName, iconSize)) {
- pixmapIcon->DrawImage(cPoint(textLeft, 0), imgLoader.GetImage());
- }
+
+ cImage *imgIcon = imgCache->GetSkinIcon(*iconName, iconSize, iconSize);
+ if (imgIcon)
+ pixmapStatic->DrawImage(cPoint(textLeft, 0), *imgIcon);
+
cString dateTime("");
if (firstDay)
dateTime = cString::sprintf("! %s", strDateTime.c_str());
else
dateTime = strDateTime.c_str();
- pixmap->DrawText(cPoint(textLeft + iconSize, (height/2 - fontSmall->Height())/2), *dateTime, Theme.Color(clrMenuFontMenuItem), clrTransparent, fontSmall);
+ tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
+ pixmapStatic->DrawText(cPoint(textLeft + iconSize, (height/2 - fontSmall->Height())/2), *dateTime, clrFont, clrTransparent, fontSmall);
}
void cNopacityTimerMenuItem::Render() {
- int handleBgrd = (current)?handleBackgrounds[11]:handleBackgrounds[10];
- textLeft = config.menuItemLogoWidth + 10;
- if (selectable) {
- DrawBackground(handleBgrd, textLeft);
- int logoWidth = config.menuItemLogoWidth;
- int logoHeight = config.menuItemLogoHeight;
+ textLeft = geoManager->menuLogoWidth + geoManager->menuSpace;
+ if (selectable) {
+ DrawBackground(textLeft);
+ DrawChannelLogoBackground();
+ int logoWidth = geoManager->menuLogoWidth;
+ int logoHeight = geoManager->menuLogoHeight;
if (!drawn) {
DrawLogo(logoWidth, logoHeight);
drawn = true;
}
if (!Running())
SetTextShort();
- if (current && scrollable && !Running() && config.menuScrollSpeed) {
+ if (current && scrollable && !Running() && config.GetValue("menuScrollSpeed")) {
Start();
}
if (wasCurrent && !current && scrollable && Running()) {
@@ -780,14 +1073,36 @@ void cNopacityTimerMenuItem::Render() {
SetTextShort();
Cancel(-1);
}
+ if (wasCurrent)
+ if (infoTextWindow) {
+ delete infoTextWindow;
+ infoTextWindow = NULL;
+ }
+ const cEvent *Event = Timer->Event();
+ if (current && Event) {
+ if (config.GetValue("menuTimersWindowMode") == 0) {
+ //window mode
+ infoTextWindow = new cNopacityTextWindow(osd, fontEPGWindow, vidWin);
+ infoTextWindow->SetGeometry(textWindow);
+ infoTextWindow->SetText(Event->Description());
+ infoTextWindow->SetPoster(Event, NULL, false);
+ infoTextWindow->Start();
+ } else {
+ //fullscreen mode
+ infoTextWindow = new cNopacityTextWindow(osd, fontEPGWindow, fontEPGWindowLarge);
+ infoTextWindow->SetGeometry(textWindow);
+ infoTextWindow->SetPoster(Event, NULL, true);
+ infoTextWindow->SetEvent(Event);
+ }
+ }
}
}
void cNopacityTimerMenuItem::DrawLogo(int logoWidth, int logoHeight) {
if (Timer && Timer->Channel() && Timer->Channel()->Name()) {
- cImageLoader imgLoader;
- if (imgLoader.LoadLogo(Timer->Channel()->Name(), logoWidth, logoHeight)) {
- pixmapIcon->DrawImage(cPoint(1, 1), imgLoader.GetImage());
+ cImage *logo = imgCache->GetLogo(ctLogoMenuItem, Timer->Channel());
+ if (logo) {
+ pixmapStatic->DrawImage(cPoint(1,1), *logo);
} else {
cTextWrapper channel;
channel.Set(Timer->Channel()->Name(), font, logoWidth);
@@ -796,19 +1111,26 @@ void cNopacityTimerMenuItem::DrawLogo(int logoWidth, int logoHeight) {
int heightChannel = lines * lineHeight;
int y = (heightChannel>height)?0:(height-heightChannel)/2;
for (int line = 0; line < lines; line++) {
- pixmapIcon->DrawText(cPoint((logoWidth - font->Width(channel.GetLine(line)))/2, y+lineHeight*line), channel.GetLine(line), Theme.Color(clrMenuFontMenuItemHigh), clrTransparent, font);
- }
+ pixmapStatic->DrawText(cPoint((logoWidth - font->Width(channel.GetLine(line)))/2, y+lineHeight*line), channel.GetLine(line), Theme.Color(clrMenuFontMenuItemHigh), clrTransparent, font);
+ }
}
}
}
// cNopacityRecordingMenuItem -------------
-cNopacityRecordingMenuItem::cNopacityRecordingMenuItem(cOsd *osd, const cRecording *Recording, bool sel, bool isFolder, int Level, int Total, int New) : cNopacityMenuItem (osd, "", sel) {
+cNopacityRecordingMenuItem::cNopacityRecordingMenuItem(cOsd *osd, cImageCache *imgCache, const cRecording *Recording, bool sel, bool isFolder, int Level, int Total, int New, cRect *vidWin) : cNopacityMenuItem (osd, imgCache, "", sel) {
this->Recording = Recording;
this->isFolder = isFolder;
this->Level = Level;
this->Total = Total;
this->New = New;
+ this->vidWin = vidWin;
+ posterWidth = 0;
+ posterHeight = 0;
+ hasManualPoster = false;
+ manualPosterPath = "";
+ hasPoster = false;
+ hasThumb = false;
}
cNopacityRecordingMenuItem::~cNopacityRecordingMenuItem(void) {
@@ -818,15 +1140,8 @@ void cNopacityRecordingMenuItem::CreatePixmapTextScroller(int totalWidth) {
int pixmapLeft = 0;
int pixmapWidth = 0;
int drawPortWidth = totalWidth + 10;
-
- if (isFolder) {
- pixmapLeft = left + 10 + config.menuRecFolderSize;
- pixmapWidth = width - 10 - config.menuRecFolderSize;
- } else {
- pixmapLeft = left + 10;
- pixmapWidth = width - 10;
- }
-
+ pixmapLeft = posterWidth + left + 20;
+ pixmapWidth = width - posterWidth - 20;
pixmapTextScroller = osd->CreatePixmap(4, cRect(pixmapLeft, top + index * (height + spaceMenu), pixmapWidth, height), cRect(0, 0, drawPortWidth, height));
pixmapTextScroller->Fill(clrTransparent);
}
@@ -836,7 +1151,7 @@ void cNopacityRecordingMenuItem::CreateText() {
try {
std::vector<std::string> tokens;
std::istringstream f(recName.c_str());
- std::string s;
+ std::string s;
while (std::getline(f, s, FOLDERDELIMCHAR)) {
tokens.push_back(s);
}
@@ -849,6 +1164,28 @@ void cNopacityRecordingMenuItem::CreateText() {
}
}
+void cNopacityRecordingMenuItem::SetPoster(void) {
+ posterHeight = height - 10;
+ posterWidth = config.GetValue("posterWidth") * ((double)posterHeight / (double)config.GetValue("posterHeight"));
+ //check first if manually set poster exists
+ cString posterFound;
+ cImageLoader imgLoader;
+ hasManualPoster = imgLoader.SearchRecordingPoster(Recording->FileName(), posterFound);
+ if (hasManualPoster)
+ manualPosterPath = posterFound;
+ //no manually set poster found, check scraper
+ static cPlugin *pScraper = GetScraperPlugin();
+ if (pScraper) {
+ thumb.event = NULL;
+ thumb.recording = Recording;
+ if (pScraper->Service("GetPosterThumb", &thumb)) {
+ hasThumb = true;
+ } else {
+ hasThumb = false;
+ }
+ }
+}
+
int cNopacityRecordingMenuItem::CheckScrollable(bool hasIcon) {
int totalWidth = 0;
if (isFolder)
@@ -859,30 +1196,26 @@ int cNopacityRecordingMenuItem::CheckScrollable(bool hasIcon) {
}
int cNopacityRecordingMenuItem::CheckScrollableRecording(void) {
- int spaceLeft = spaceMenu;
+ int spaceLeft = spaceMenu + posterWidth + 15;
int iconWidth = 0;
- if (Recording->IsNew())
- iconWidth += font->Height() + 10;
- if (Recording->IsEdited())
- iconWidth += font->Height() + 5;
int totalTextWidth = width - spaceLeft;
strRecNameFull = strRecName.c_str();
if (font->Width(strRecName.c_str()) + iconWidth > (width - spaceLeft)) {
scrollable = true;
totalTextWidth = max(font->Width(strRecName.c_str()) + iconWidth, totalTextWidth);
- strRecName = CutText(&strRecName, width - spaceLeft - iconWidth, font);
+ strRecName = CutText(strRecName, width - spaceLeft - iconWidth, font);
}
return totalTextWidth;
}
int cNopacityRecordingMenuItem::CheckScrollableFolder(void) {
- int spaceLeft = spaceMenu + config.menuRecFolderSize;
+ int spaceLeft = spaceMenu + posterWidth + 15;
int totalTextWidth = width - spaceLeft;
strRecNameFull = strRecName.c_str();
if (font->Width(strRecName.c_str()) > (width - spaceLeft)) {
scrollable = true;
totalTextWidth = max(font->Width(strRecName.c_str()), totalTextWidth);
- strRecName = CutText(&strRecName, width - spaceLeft, font);
+ strRecName = CutText(strRecName, width - spaceLeft, font);
}
return totalTextWidth;
}
@@ -895,24 +1228,53 @@ void cNopacityRecordingMenuItem::SetTextFull(void) {
SetTextFullRecording();
}
+void cNopacityRecordingMenuItem::DrawBackground(void) {
+ eSkinElementType type = (current)?seRecordingsHigh:seRecordings;
+ if (config.GetValue("displayType") == dtBlending) {
+ pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+ cImage *back = imgCache->GetSkinElement(type);
+ if (back)
+ pixmapBackground->DrawImage(cPoint(1, 1), *back);
+ if (config.GetValue("roundedCorners"))
+ DrawRoundedCorners(Theme.Color(clrMenuBorder));
+ } else if (config.GetValue("displayType") == dtGraphical) {
+ cImage *back = imgCache->GetSkinElement(type);
+ if (back) {
+ pixmapBackground->DrawImage(cPoint(0, 0), *back);
+ } else {
+ pixmapBackground->Fill(clrTransparent);
+ }
+ cImage *fore = imgCache->GetSkinElement(seRecordingsTop);
+ if (fore) {
+ pixmapForeground->DrawImage(cPoint(0, 0), *fore);
+ } else {
+ pixmapForeground->Fill(clrTransparent);
+ }
+
+ } else {
+ pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+ tColor col = (current)?Theme.Color(clrMenuItemHigh):Theme.Color(clrMenuItem);
+ pixmapBackground->DrawRectangle(cRect(1, 1, width-2, height-2), col);
+ if (config.GetValue("roundedCorners"))
+ DrawRoundedCorners(Theme.Color(clrMenuBorder));
+ }
+}
+
void cNopacityRecordingMenuItem::SetTextFullFolder(void) {
tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
pixmapTextScroller->Fill(clrTransparent);
- DrawFolderIcon();
+ if (config.GetValue("useFolderPoster") && (hasPoster || hasThumb || hasManualPoster))
+ DrawPoster();
+ else
+ DrawFolderIcon();
int heightRecName = (2*height/3 - font->Height())/2 + 10;
- pixmapTextScroller->DrawText(cPoint(0, heightRecName), strRecNameFull.c_str(), clrFont, clrTransparent, font);
+ pixmapTextScroller->DrawText(cPoint(5, heightRecName), strRecNameFull.c_str(), clrFont, clrTransparent, font);
}
void cNopacityRecordingMenuItem::SetTextFullRecording(void) {
tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
pixmapTextScroller->Fill(clrTransparent);
int textLeft = 5;
- if (Recording->IsNew()) {
- textLeft += DrawRecordingNewIcon();
- }
- if (Recording->IsEdited()) {
- textLeft += DrawRecordingEditedIcon(textLeft);
- }
int heightRecName = (height / 2 - font->Height())/2;
pixmapTextScroller->DrawText(cPoint(textLeft, heightRecName), strRecNameFull.c_str(), clrFont, clrTransparent, font);
}
@@ -928,71 +1290,69 @@ void cNopacityRecordingMenuItem::SetTextShort(void) {
void cNopacityRecordingMenuItem::SetTextShortFolder(void) {
tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
pixmapTextScroller->Fill(clrTransparent);
- DrawFolderIcon();
+ if (config.GetValue("useFolderPoster") && (hasPoster || hasThumb || hasManualPoster))
+ DrawPoster();
+ else
+ DrawFolderIcon();
int heightRecName = (2*height/3 - font->Height())/2 + 10;
- pixmapTextScroller->DrawText(cPoint(0, heightRecName), strRecName.c_str(), clrFont, clrTransparent, font);
+ pixmapTextScroller->DrawText(cPoint(5, heightRecName), strRecName.c_str(), clrFont, clrTransparent, font);
}
void cNopacityRecordingMenuItem::SetTextShortRecording(void) {
tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
pixmapTextScroller->Fill(clrTransparent);
int textLeft = 5;
- if (Recording->IsNew()) {
- textLeft += DrawRecordingNewIcon();
- }
- if (Recording->IsEdited()) {
- textLeft += DrawRecordingEditedIcon(textLeft);
- }
int heightRecName = (height / 2 - font->Height())/2;
pixmapTextScroller->DrawText(cPoint(textLeft, heightRecName), strRecName.c_str(), clrFont, clrTransparent, font);
}
-int cNopacityRecordingMenuItem::DrawRecordingNewIcon(void) {
- int iconNewSize = font->Height();
- cImageLoader imgLoader;
- if (imgLoader.LoadIcon("skinIcons/newrecording", iconNewSize)) {
- int iconHeight = (height/2 - iconNewSize)/2;
- pixmapTextScroller->DrawImage(cPoint(1, iconHeight), imgLoader.GetImage());
+void cNopacityRecordingMenuItem::DrawRecordingNewIcon(void) {
+ int iconNewSize = height/3;
+
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/newrecording", iconNewSize, iconNewSize);
+ if (imgIcon) {
+ int iconX = pixmapStatic->ViewPort().Width() - iconNewSize;
+ int iconY = height/2;
+ pixmapStatic->DrawImage(cPoint(iconX, iconY), *imgIcon);
}
- return iconNewSize;
}
-int cNopacityRecordingMenuItem::DrawRecordingEditedIcon(int startLeft) {
- int iconEditedSize = font->Height() - 10;
- cImageLoader imgLoader;
- if (imgLoader.LoadIcon("skinIcons/recordingcutted", iconEditedSize)) {
- int iconHeight = (height/2 - iconEditedSize)/2;
- pixmapTextScroller->DrawImage(cPoint(startLeft + 5, iconHeight), imgLoader.GetImage());
+void cNopacityRecordingMenuItem::DrawRecordingEditedIcon(void) {
+ int iconCutSize = height/3;
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/recordingcutted", iconCutSize, iconCutSize);
+ if (imgIcon) {
+ int iconX = pixmapStatic->ViewPort().Width() - iconCutSize;
+ if (Recording->IsNew())
+ iconX -= iconCutSize;
+ int iconY = height/2;
+ pixmapStatic->DrawImage(cPoint(iconX, iconY), *imgIcon);
}
- return iconEditedSize + 5;
}
void cNopacityRecordingMenuItem::DrawFolderIcon(void) {
- cImageLoader imgLoader;
- if (imgLoader.LoadIcon("skinIcons/recordingfolder", config.menuRecFolderSize)) {
- pixmapIcon->DrawImage(cPoint(1, 1), imgLoader.GetImage());
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/recfolder", posterWidth, posterHeight);
+ if (imgIcon) {
+ pixmapStatic->DrawImage(cPoint(10, 1), *imgIcon);
}
}
void cNopacityRecordingMenuItem::DrawRecDateTime(void) {
- int iconDateTimeSize = config.menuRecFolderSize / 2;
- if (!drawn) {
- cImageLoader imgLoader;
- if (imgLoader.LoadIcon("skinIcons/recordingdatetime", iconDateTimeSize)) {
- int iconHeight = height/2 + (height/2 - iconDateTimeSize)/2;
- pixmapIcon->DrawImage(cPoint(3, iconHeight), imgLoader.GetImage());
- }
- drawn = true;
- }
+ int left = posterWidth + 20;
+ pixmapStatic->DrawRectangle(cRect(left, 0, width, height), clrTransparent);
const cEvent *Event = NULL;
Event = Recording->Info()->GetEvent();
cString strDateTime("");
cString strDuration("");
if (Event) {
- cString strDate = Event->GetDateString();
+ std::string strDate = *(Event->GetDateString());
cString strTime = Event->GetTimeString();
- strDateTime = cString::sprintf("%s - %s", *strDate, *strTime);
+ if (strDate.find("1970") != std::string::npos) {
+ time_t start = Recording->Start();
+ strDateTime = cString::sprintf("%s %s", *DateString(start),*TimeString(start));
+ } else {
+ strDateTime = cString::sprintf("%s - %s", strDate.c_str(), *strTime);
+ }
int duration = Event->Duration() / 60;
int recDuration = Recording->LengthInSeconds();
recDuration = (recDuration>0)?(recDuration / 60):0;
@@ -1000,34 +1360,58 @@ void cNopacityRecordingMenuItem::DrawRecDateTime(void) {
}
int textHeight = height/2 + (height/4 - fontSmall->Height())/2;
- pixmapIcon->DrawText(cPoint(iconDateTimeSize + 10, textHeight), *strDateTime, Theme.Color(clrMenuFontMenuItem), clrTransparent, fontSmall);
+ tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
+ pixmapStatic->DrawText(cPoint(10 + left, textHeight), *strDateTime, clrFont, clrTransparent, fontSmall);
textHeight += height/4;
- pixmapIcon->DrawText(cPoint(iconDateTimeSize + 10, textHeight), *strDuration, Theme.Color(clrMenuFontMenuItem), clrTransparent, fontSmall);
-
+ pixmapStatic->DrawText(cPoint(10 + left, textHeight), *strDuration, clrFont, clrTransparent, fontSmall);
}
void cNopacityRecordingMenuItem::DrawFolderNewSeen(void) {
int textHeight = 2*height/3 + (height/3 - fontSmall->Height())/2 - 10;
cString strTotalNew = cString::sprintf("%d %s (%d %s)", Total, (Total > 1)?tr("recordings"):tr("recording"), New, tr("new"));
- pixmapIcon->DrawText(cPoint(config.menuRecFolderSize + 10, textHeight), *strTotalNew, Theme.Color(clrMenuFontMenuItem), clrTransparent, fontSmall);
+ tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
+ pixmapStatic->DrawText(cPoint(posterWidth + 30, textHeight), *strTotalNew, clrFont, clrTransparent, fontSmall);
+}
+
+void cNopacityRecordingMenuItem::DrawPoster(void) {
+ cImageLoader imgLoader;
+ bool posterDrawn = false;
+ if (hasManualPoster) {
+ if (imgLoader.LoadPoster(*manualPosterPath, posterWidth, posterHeight)) {
+ posterDrawn = true;
+ pixmapStatic->DrawImage(cPoint(10, 5), imgLoader.GetImage());
+ }
+ } else if (hasThumb) {
+ if (imgLoader.LoadPoster(thumb.poster.path.c_str(), posterWidth, posterHeight)) {
+ posterDrawn = true;
+ pixmapStatic->DrawImage(cPoint(10, 5), imgLoader.GetImage());
+ }
+ }
+ if (!posterDrawn) {
+ cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/defaultPoster", posterWidth, posterHeight);
+ if (imgIcon)
+ pixmapStatic->DrawImage(cPoint(10,5), *imgIcon);
+ }
}
void cNopacityRecordingMenuItem::Render() {
-
- int handleBgrd = (current)?handleBackgrounds[9]:handleBackgrounds[8];
- if (selectable) {
- pixmap->Fill(Theme.Color(clrMenuBorder));
- pixmap->DrawImage(cPoint(1, 1), handleBgrd);
- if (config.roundedCorners)
- DrawRoundedCorners(Theme.Color(clrMenuBorder));
+ if (selectable) {
+ DrawBackground();
if (isFolder) {
DrawFolderNewSeen();
SetTextShort();
} else {
+ DrawPoster();
DrawRecDateTime();
+ if (Recording->IsNew()) {
+ DrawRecordingNewIcon();
+ }
+ if (Recording->IsEdited()) {
+ DrawRecordingEditedIcon();
+ }
SetTextShort();
}
- if (current && scrollable && !Running() && config.menuScrollSpeed) {
+ if (current && scrollable && !Running() && config.GetValue("menuScrollSpeed")) {
Start();
}
if (wasCurrent && !current && scrollable && Running()) {
@@ -1042,10 +1426,22 @@ void cNopacityRecordingMenuItem::Render() {
infoTextWindow = NULL;
}
if (current) {
- infoTextWindow = new cNopacityTextWindow(osd, fontEPGWindow);
- infoTextWindow->SetGeometry(textWindow);
- infoTextWindow->SetText(Recording->Info()->Description());
- infoTextWindow->Start();
+ if (config.GetValue("menuRecordingsWindowMode") == 0) {
+ //window mode
+ infoTextWindow = new cNopacityTextWindow(osd, fontEPGWindow, vidWin);
+ infoTextWindow->SetGeometry(textWindow);
+ infoTextWindow->SetText(Recording->Info()->Description());
+ if (!infoTextWindow->SetManualPoster(Recording))
+ infoTextWindow->SetPoster(NULL, Recording);
+ infoTextWindow->Start();
+ } else {
+ //fullscreen mode
+ infoTextWindow = new cNopacityTextWindow(osd, fontEPGWindow, fontEPGWindowLarge);
+ infoTextWindow->SetGeometry(textWindow);
+ if (!infoTextWindow->SetManualPoster(Recording, true))
+ infoTextWindow->SetPoster(NULL, Recording, true);
+ infoTextWindow->SetRecording(Recording);
+ }
}
}
}
@@ -1054,7 +1450,7 @@ void cNopacityRecordingMenuItem::Render() {
// cNopacityDefaultMenuItem -------------
-cNopacityDefaultMenuItem::cNopacityDefaultMenuItem(cOsd *osd, const char *text, bool sel) : cNopacityMenuItem (osd, text, sel) {
+cNopacityDefaultMenuItem::cNopacityDefaultMenuItem(cOsd *osd, cImageCache *imgCache, const char *text, bool sel) : cNopacityMenuItem (osd, imgCache, text, sel) {
scrollCol = -1;
}
@@ -1062,15 +1458,40 @@ cNopacityDefaultMenuItem::~cNopacityDefaultMenuItem(void) {
}
bool cNopacityDefaultMenuItem::CheckProgressBar(const char *text) {
- if (strlen(text) > 5
- && text[0] == '['
- && ((text[1] == '|')||(text[1] == ' '))
- && ((text[2] == '|')||(text[2] == ' '))
+ if (strlen(text) > 5
+ && text[0] == '['
+ && ((text[1] == '|')||(text[1] == ' '))
+ && ((text[2] == '|')||(text[2] == ' '))
&& text[strlen(text) - 1] == ']')
return true;
return false;
}
+void cNopacityDefaultMenuItem::DrawBackground(void) {
+ eSkinElementType type = (current)?seDefaultHigh:seDefault;
+ if (config.GetValue("displayType") == dtBlending) {
+ pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+ cImage *back = imgCache->GetSkinElement(type);
+ if (back)
+ pixmapBackground->DrawImage(cPoint(1, 1), *back);
+ if (config.GetValue("roundedCorners"))
+ DrawRoundedCorners(Theme.Color(clrMenuBorder));
+ } else if (config.GetValue("displayType") == dtGraphical) {
+ cImage *back = imgCache->GetSkinElement(type);
+ if (back) {
+ pixmapBackground->DrawImage(cPoint(0, 0), *back);
+ } else {
+ pixmapBackground->Fill(clrTransparent);
+ }
+ } else {
+ pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+ tColor col = (current)?Theme.Color(clrMenuItemHigh):Theme.Color(clrMenuItem);
+ pixmapBackground->DrawRectangle(cRect(1, 1, width-2, height-2), col);
+ if (config.GetValue("roundedCorners"))
+ DrawRoundedCorners(Theme.Color(clrMenuBorder));
+ }
+}
+
void cNopacityDefaultMenuItem::DrawProgressBar(int x, int width, const char *bar, tColor color) {
const char *p = bar + 1;
bool isProgressbar = true;
@@ -1087,11 +1508,11 @@ void cNopacityDefaultMenuItem::DrawProgressBar(int x, int width, const char *bar
}
}
if (isProgressbar) {
- pixmap->DrawRectangle(cRect(x+5, height/4, width-10, height/2), color);
- pixmap->DrawRectangle(cRect(x+7, height/4+2, width-14, height/2-4), Theme.Color(clrMenuItemBlend));
+ pixmapStatic->DrawRectangle(cRect(x+5, height/4, width-10, height/2), color);
+ pixmapStatic->DrawRectangle(cRect(x+7, height/4+2, width-14, height/2-4), clrTransparent);
double progress = (double)now/(double)total;
- pixmap->DrawRectangle(cRect(x+8, height/4+3, (width-16)*progress, height/2-6), color);
-
+ pixmapStatic->DrawRectangle(cRect(x+8, height/4+3, (width-16)*progress, height/2-6), color);
+
}
}
@@ -1112,8 +1533,9 @@ void cNopacityDefaultMenuItem::SetTextShort(void) {
int cNopacityDefaultMenuItem::CheckScrollable(bool hasIcon) {
if (!selectable)
return 0;
+ scrollable = false;
int colWidth = 0;
- int colTextWidth = 0;
+ int colTextWidth = 0;
for (int i=0; i<numTabs; i++) {
if (tabWidth[i] > 0) {
if (CheckProgressBar(*itemTabs[i]))
@@ -1133,8 +1555,20 @@ int cNopacityDefaultMenuItem::CheckScrollable(bool hasIcon) {
break;
}
if (scrollable) {
- pixmapTextScroller = osd->CreatePixmap(4, cRect(left + tabWidth[scrollCol], top + index * (height + spaceMenu), tabWidth[scrollCol+numTabs], height), cRect(0, 0, colTextWidth+10, height));
- pixmapTextScroller->Fill(clrTransparent);
+ if (!pixmapTextScroller) {
+ pixmapTextScroller = osd->CreatePixmap(4, cRect(left + tabWidth[scrollCol], top + index * (height + spaceMenu), tabWidth[scrollCol+numTabs], height), cRect(0, 0, colTextWidth+10, height));
+ pixmapTextScroller->Fill(clrTransparent);
+ }
+ } else {
+ if (pixmapTextScroller) {
+ while (Running()) {
+ Cancel(-1);
+ DoSleep(10);
+ }
+ osd->DestroyPixmap(pixmapTextScroller);
+ pixmapTextScroller = NULL;
+ scrollCol = -1;
+ }
}
return 0;
}
@@ -1157,25 +1591,30 @@ bool cNopacityDefaultMenuItem::DrawHeaderElement(void) {
*(c2 + 1) = 0;
int left = 5 + tabWidth[0];
- pixmap->DrawText(cPoint(left, (height - font->Height()) / 2), c, Theme.Color(clrMenuFontMenuItemSep), clrTransparent, font);
+ pixmapStatic->DrawText(cPoint(left, (height - font->Height()) / 2), c, Theme.Color(clrMenuFontMenuItemSep), clrTransparent, font);
return true;
}
return false;
}
void cNopacityDefaultMenuItem::Render() {
- pixmap->Fill(Theme.Color(clrMenuBorder));
- int handleBgrd = (current)?handleBackgrounds[1]:handleBackgrounds[0];
- tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
- pixmap->DrawImage(cPoint(1, 1), handleBgrd);
- if (config.roundedCorners)
- DrawRoundedCorners(Theme.Color(clrMenuBorder));
+ DrawBackground();
+ pixmapStatic->Fill(clrTransparent);
+
+ tColor clrFont;
+ if (current)
+ clrFont = Theme.Color(clrMenuFontMenuItemHigh);
+ else if (!selectable)
+ clrFont = Theme.Color(clrMenuFontMenuItemSep);
+ else
+ clrFont = Theme.Color(clrMenuFontMenuItem);
+
if (!selectable && (strncmp(Text, "---", 3) == 0)) {
if (DrawHeaderElement())
return;
}
int colWidth = 0;
- int colTextWidth = 0;
+ int colTextWidth = 0;
cString itemText("");
for (int i=0; i<numTabs; i++) {
if (tabWidth[i] > 0) {
@@ -1198,7 +1637,7 @@ void cNopacityDefaultMenuItem::Render() {
itemText = itemTabs[i];
}
if (i==0) posX += 5;
- pixmap->DrawText(cPoint(posX, (height - font->Height()) / 2), *itemText, clrFont, clrTransparent, font);
+ pixmapStatic->DrawText(cPoint(posX, (height - font->Height()) / 2), *itemText, clrFont, clrTransparent, font);
} else {
if (!Running())
SetTextShort();
@@ -1207,7 +1646,7 @@ void cNopacityDefaultMenuItem::Render() {
break;
}
- if (current && scrollable && !Running() && config.menuScrollSpeed) {
+ if (current && scrollable && !Running() && config.GetValue("menuScrollSpeed")) {
Start();
}
if (wasCurrent && !current && scrollable && Running()) {
@@ -1219,17 +1658,41 @@ void cNopacityDefaultMenuItem::Render() {
// cNopacityTrackMenuItem -------------
-cNopacityTrackMenuItem::cNopacityTrackMenuItem(cOsd *osd, const char *text) : cNopacityMenuItem (osd, text, true) {
+cNopacityTrackMenuItem::cNopacityTrackMenuItem(cOsd *osd, cImageCache *imgCache, const char *text) : cNopacityMenuItem (osd, imgCache, text, true) {
}
cNopacityTrackMenuItem::~cNopacityTrackMenuItem(void) {
}
void cNopacityTrackMenuItem::Render() {
- pixmap->Fill(Theme.Color(clrMenuBorder));
- int handleBgrd = (current)?handleBackgrounds[1]:handleBackgrounds[0];
- pixmap->DrawImage(cPoint(1, 1), handleBgrd);
- if (config.roundedCorners)
- DrawRoundedCorners(Theme.Color(clrMenuBorder));
- pixmap->DrawText(cPoint(5, (height - font->Height())/2), Text, Theme.Color(clrTracksFontButtons), clrTransparent, font);
+ eSkinElementType type = (current)?seTracksHigh:seTracks;
+ if (config.GetValue("displayType") == dtBlending) {
+ pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+ cImage *back = imgCache->GetSkinElement(type);
+ if (back)
+ pixmapBackground->DrawImage(cPoint(1, 1), *back);
+ if (config.GetValue("roundedCorners"))
+ DrawRoundedCorners(Theme.Color(clrMenuBorder));
+ } else if (config.GetValue("displayType") == dtGraphical) {
+ cImage *back = imgCache->GetSkinElement(type);
+ if (back) {
+ pixmapBackground->DrawImage(cPoint(0, 0), *back);
+ } else {
+ pixmapBackground->Fill(clrTransparent);
+ }
+ cImage *fore = imgCache->GetSkinElement(seTracksTop);
+ if (fore) {
+ pixmapForeground->DrawImage(cPoint(0, 0), *fore);
+ } else {
+ pixmapForeground->Fill(clrTransparent);
+ }
+ } else {
+ pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+ tColor col = (current)?Theme.Color(clrMenuItemHigh):Theme.Color(clrMenuItem);
+ pixmapBackground->DrawRectangle(cRect(1, 1, width-2, height-2), col);
+ if (config.GetValue("roundedCorners"))
+ DrawRoundedCorners(Theme.Color(clrMenuBorder));
+ }
+ tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrTracksFontButtons);
+ pixmapStatic->DrawText(cPoint(5, (height - font->Height())/2), Text, clrFont, clrTransparent, font);
}
diff --git a/menuitem.h b/menuitem.h
index 3309986..536a77e 100644
--- a/menuitem.h
+++ b/menuitem.h
@@ -1,13 +1,18 @@
#ifndef __NOPACITY_MENUITEM_H
#define __NOPACITY_MENUITEM_H
+#include "textwindow.h"
+#include <string>
+#include "imagecache.h"
+
class cNopacityMenuItem : public cListObject, public cThread {
protected:
cOsd *osd;
- cPixmap *pixmap;
- cPixmap *pixmapIcon;
+ cImageCache *imgCache;
+ cPixmap *pixmapBackground;
+ cPixmap *pixmapStatic;
cPixmap *pixmapTextScroller;
- int *handleBackgrounds;
+ cPixmap *pixmapForeground;
const char *Text;
bool selectable;
bool current;
@@ -17,6 +22,7 @@ protected:
cFont *font;
cFont *fontSmall;
cFont *fontEPGWindow;
+ cFont *fontEPGWindowLarge;
int width, height;
int top, left;
int spaceMenu;
@@ -29,29 +35,31 @@ protected:
cNopacityTextWindow *infoTextWindow;
virtual void SetTextFull(void) {};
virtual void SetTextShort(void) {};
- void DrawDelimiter(const char *del, const char *icon, int handleBgrd);
+ void DrawDelimiter(const char *del, const char *icon, eSkinElementType seType);
+ void DrawRoundedCorners(tColor borderColor);
+ void DrawChannelLogoBackground(void);
virtual void Action(void);
void DoSleep(int duration);
- std::string CutText(std::string *text, int width, const cFont *font);
- void DrawRoundedCorners(tColor borderColor);
public:
- cNopacityMenuItem(cOsd *osd, const char *text, bool sel);
+ cNopacityMenuItem(cOsd *osd, cImageCache *imgCache, const char *text, bool sel);
virtual ~cNopacityMenuItem(void);
- void CreatePixmap();
- void CreatePixmapIcon(void);
+ void CreatePixmapBackground();
+ void CreatePixmapForeground();
+ void CreatePixmapStatic(void);
virtual void CreatePixmapTextScroller(int totalWidth);
void SetGeometry(int index, int top, int left, int width, int height, int spaceMenu);
void SetFont(cFont *font) {this->font = font;}
void SetFontSmall(cFont *fontSmall) {this->fontSmall = fontSmall;}
void SetFontEPGWindow(cFont *font) {this->fontEPGWindow = font;}
- void SetCurrent(bool cur);
- void SetAlpha(int alpha) {this->pixmap->SetAlpha(alpha);}
- void SetAlphaIcon(int alpha) {if (pixmapIcon) this->pixmapIcon->SetAlpha(alpha);}
+ void SetFontEPGWindowLarge(cFont *font) {this->fontEPGWindowLarge = font;}
+ void SetCurrent(bool cur);
+ void SetAlpha(int alpha) {this->pixmapBackground->SetAlpha(alpha);}
+ void SetAlphaIcon(int alpha) {if (pixmapStatic) this->pixmapStatic->SetAlpha(alpha);}
void SetAlphaText(int alpha) {if (pixmapTextScroller) this->pixmapTextScroller->SetAlpha(alpha);}
void SetTabs(cString *tabs, int *tabWidths, int numtabs);
- void SetBackgrounds(int *handleBackgrounds);
void SetTextWindow(cRect *window) {textWindow = window;};
virtual void CreateText(void) {};
+ virtual void SetPoster(void) {};
virtual int CheckScrollable(bool hasIcon) {return 0;};
virtual void Render() = 0;
};
@@ -65,10 +73,11 @@ private:
std::string strEntryFull;
static std::string items[16];
cString GetIconName();
+ void DrawBackground(void);
void SetTextFull(void);
void SetTextShort(void);
public:
- cNopacityMainMenuItem(cOsd *osd, const char *text, bool sel, bool setup);
+ cNopacityMainMenuItem(cOsd *osd, cImageCache *imgCache, const char *text, bool sel, bool setup);
~cNopacityMainMenuItem(void);
void CreatePixmapTextScroller(int totalWidth);
void CreateText(void);
@@ -82,6 +91,7 @@ private:
const cEvent *Event;
const cChannel *Channel;
eTimerMatch TimerMatch;
+ cRect *vidWin;
std::string strDateTime;
std::string strTitle;
std::string strSubTitle;
@@ -96,7 +106,7 @@ private:
void SetTextFull(void);
void SetTextShort(void);
public:
- cNopacityScheduleMenuItem(cOsd *osd, const cEvent *Event, const cChannel *Channel, eTimerMatch TimerMatch, bool sel, eMenuCategory category);
+ cNopacityScheduleMenuItem(cOsd *osd, cImageCache *imgCache, const cEvent *Event, const cChannel *Channel, eTimerMatch TimerMatch, bool sel, eMenuCategory category, cRect *vidWin);
~cNopacityScheduleMenuItem(void);
void CreatePixmapTextScroller(int totalWidth);
void CreateText(void);
@@ -111,11 +121,17 @@ private:
std::string strEntryFull;
cString strChannelSource;
cString strChannelInfo;
+ std::string strEpgInfo;
+ std::string strEpgInfoFull;
+ std::string strTimeInfo;
+ cRect *vidWin;
void SetTextFull(void);
void SetTextShort(void);
- void DrawBackground(int handleBackground);
+ void DrawBackground(void);
+ void readCurrentEPG(void);
+ std::string readEPG(void);
public:
- cNopacityChannelMenuItem(cOsd *osd, const cChannel *Channel, bool sel);
+ cNopacityChannelMenuItem(cOsd *osd, cImageCache *imgCache, const cChannel *Channel, bool sel, cRect *vidWin);
~cNopacityChannelMenuItem(void);
void CreatePixmapTextScroller(int totalWidth);
void CreateText(void);
@@ -129,13 +145,14 @@ private:
std::string strEntry;
std::string strEntryFull;
std::string strDateTime;
+ cRect *vidWin;
void SetTextFull(void);
void SetTextShort(void);
- void DrawBackground(int handleBackground, int textLeft);
+ void DrawBackground(int textLeft);
void DrawLogo(int logoWidth, int logoHeight);
std::string CreateDate(void);
public:
- cNopacityTimerMenuItem(cOsd *osd, const cTimer *Timer, bool sel);
+ cNopacityTimerMenuItem(cOsd *osd, cImageCache *imgCache, const cTimer *Timer, bool sel, cRect *vidWin);
~cNopacityTimerMenuItem(void);
void CreatePixmapTextScroller(int totalWidth);
void CreateText(void);
@@ -147,7 +164,14 @@ class cNopacityRecordingMenuItem : public cNopacityMenuItem {
private:
const cRecording *Recording;
bool isFolder;
+ bool hasManualPoster;
+ cString manualPosterPath;
+ bool hasPoster;
+ bool hasThumb;
+ int posterWidth, posterHeight;
+ ScraperGetPosterThumb thumb;
int Level, Total, New;
+ cRect *vidWin;
std::string strRecName;
std::string strRecNameFull;
void SetTextFull(void);
@@ -156,18 +180,21 @@ private:
void SetTextShortFolder(void);
void SetTextFullRecording(void);
void SetTextShortRecording(void);
- int DrawRecordingNewIcon(void);
- int DrawRecordingEditedIcon(int startLeft);
+ void DrawBackground(void);
+ void DrawRecordingNewIcon(void);
+ void DrawRecordingEditedIcon(void);
void DrawFolderIcon(void);
void DrawRecDateTime(void);
void DrawFolderNewSeen(void);
+ void DrawPoster(void);
int CheckScrollableRecording(void);
int CheckScrollableFolder(void);
public:
- cNopacityRecordingMenuItem(cOsd *osd, const cRecording *Recording, bool sel, bool isFolder, int Level, int Total, int New);
+ cNopacityRecordingMenuItem(cOsd *osd, cImageCache *imgCache, const cRecording *Recording, bool sel, bool isFolder, int Level, int Total, int New, cRect *vidWin);
~cNopacityRecordingMenuItem(void);
void CreatePixmapTextScroller(int totalWidth);
void CreateText(void);
+ void SetPoster(void);
int CheckScrollable(bool hasIcon);
void Render();
};
@@ -175,6 +202,7 @@ public:
class cNopacityDefaultMenuItem : public cNopacityMenuItem {
private:
bool CheckProgressBar(const char *text);
+ void DrawBackground(void);
void DrawProgressBar(int x, int width, const char *bar, tColor color);
bool DrawHeaderElement(void);
std::string strEntry;
@@ -183,7 +211,7 @@ private:
void SetTextFull(void);
void SetTextShort(void);
public:
- cNopacityDefaultMenuItem(cOsd *osd, const char *text, bool sel);
+ cNopacityDefaultMenuItem(cOsd *osd, cImageCache *imgCache, const char *text, bool sel);
~cNopacityDefaultMenuItem(void);
int CheckScrollable(bool hasIcon);
void Render();
@@ -192,7 +220,7 @@ public:
class cNopacityTrackMenuItem : public cNopacityMenuItem {
private:
public:
- cNopacityTrackMenuItem(cOsd *osd, const char *text);
+ cNopacityTrackMenuItem(cOsd *osd, cImageCache *imgCache, const char *text);
~cNopacityTrackMenuItem(void);
void Render();
};
diff --git a/nopacity.c b/nopacity.c
index 63ea93f..f75d3b9 100644
--- a/nopacity.c
+++ b/nopacity.c
@@ -1,150 +1,29 @@
#include <vdr/osd.h>
#include <vdr/menu.h>
-static cTheme Theme;
-
-//COMMON
-#define CLR_TRANSBLACK 0xDD000000
-#define CLR_TRANSBLACK2 0xB0000000
-#define CLR_DARKBLUE 0xDD003DF5
-#define CLR_DARKBLUE2 0xB0003DF5
-#define CLR_WHITE 0xFFFFFFFF
-#define CLR_BRIGHTBLUE 0xFF0066FF
-#define CLR_GRAY 0xFF858585
-
-//CHANNELS
-#define CLR_PROGRESSBARBACK 0xDD858585
-#define CLR_PROGRESSBARBLEND 0xDD80B3FF
-#define CLR_CHANNELSYMBOLOFF 0xDD858585
-#define CLR_CHANNELRECACTIVE 0xDDFF0000
-
-//REPLAY
-#define CLR_REPLAYCURRENTTOTAL 0xFF003DF5
-#define CLR_REST 0xDD858585
-#define CLR_EXPOSED 0xFF000000
-#define CLR_CURRENT 0x90FFFFFF
-#define CLR_MARKS 0xFF000000
-
-//MENU
-#define CLR_MENUSCROLLBARBACK 0x40003DF5
-#define CLR_MENUITEM 0xEE444444
-#define CLR_MENUITEMBLEND 0x90000000
-#define CLR_MENUITEMHIGHBLEND 0xEE0033FF
-#define CLR_SEPARATORBORDER 0xEE444444
-#define CLR_DISKALERT 0xDDFF0000
-#define CLR_MENUHEADER 0xDD000000
-#define CLR_MENUHEADERBLEND 0xEE0033FF
-
-//BUTTONS
-#define CLR_BUTTONRED 0x99BB0000
-#define CLR_BUTTONREDBORDER 0xFFBB0000
-#define CLR_BUTTONGREEN 0x9900BB00
-#define CLR_BUTTONGREENBORDER 0xFF00BB00
-#define CLR_BUTTONYELLOW 0x99BBBB00
-#define CLR_BUTTONYELLOWBORDER 0xFFBBBB00
-#define CLR_BUTTONBLUE 0x990000BB
-#define CLR_BUTTONBLUEBORDER 0xFF0000BB
-
-//MESSAGES
-#define CLR_MESSAGESTATUS 0x900000FF
-#define CLR_MESSAGEINFO 0x90009900
-#define CLR_MESSAGEWARNING 0x90BBBB00
-#define CLR_MESSAGEERROR 0x90BB0000
-
-//CHANNELS
-THEME_CLR(Theme, clrChannelBackground, CLR_TRANSBLACK2);
-THEME_CLR(Theme, clrChannelBackBlend, CLR_DARKBLUE2);
-THEME_CLR(Theme, clrChannelHead, CLR_BRIGHTBLUE);
-THEME_CLR(Theme, clrChannelEPG, CLR_WHITE);
-THEME_CLR(Theme, clrChannelEPGInfo, CLR_GRAY);
-THEME_CLR(Theme, clrProgressBar, CLR_DARKBLUE);
-THEME_CLR(Theme, clrProgressBarBack, CLR_PROGRESSBARBACK);
-THEME_CLR(Theme, clrProgressBarBlend, CLR_PROGRESSBARBLEND);
-THEME_CLR(Theme, clrChannelSymbolOn, CLR_DARKBLUE);
-THEME_CLR(Theme, clrChannelSymbolOff, CLR_CHANNELSYMBOLOFF);
-THEME_CLR(Theme, clrChannelRecActive, CLR_CHANNELRECACTIVE);
-//REPLAY
-THEME_CLR(Theme, clrReplayBackground, CLR_TRANSBLACK2);
-THEME_CLR(Theme, clrReplayBackBlend, CLR_DARKBLUE2);
-THEME_CLR(Theme, clrReplayHead, CLR_WHITE);
-THEME_CLR(Theme, clrReplayDescription, CLR_GRAY);
-THEME_CLR(Theme, clrReplayCurrentTotal, CLR_REPLAYCURRENTTOTAL);
-THEME_CLR(Theme, clrReplayProgressSeen, CLR_DARKBLUE);
-THEME_CLR(Theme, clrReplayProgressRest, CLR_REST);
-THEME_CLR(Theme, clrReplayProgressSelected, CLR_EXPOSED);
-THEME_CLR(Theme, clrReplayProgressMark, CLR_MARKS);
-THEME_CLR(Theme, clrReplayProgressCurrent, CLR_CURRENT);
-THEME_CLR(Theme, clrReplayHighlightIcon, CLR_DARKBLUE);
-//TRACKS
-THEME_CLR(Theme, clrTracksFontHead, CLR_GRAY);
-THEME_CLR(Theme, clrTracksFontButtons, CLR_WHITE);
-//Volume
-THEME_CLR(Theme, clrVolumeFont, CLR_GRAY);
-//MENU
-THEME_CLR(Theme, clrMenuBack, CLR_TRANSBLACK);
-THEME_CLR(Theme, clrMenuBorder, CLR_DARKBLUE);
-THEME_CLR(Theme, clrMenuScrollBar, CLR_DARKBLUE);
-THEME_CLR(Theme, clrMenuScrollBarBack, CLR_MENUSCROLLBARBACK);
-THEME_CLR(Theme, clrMenuItem, CLR_MENUITEM);
-THEME_CLR(Theme, clrMenuItemBlend, CLR_MENUITEMBLEND);
-THEME_CLR(Theme, clrMenuItemHigh, CLR_TRANSBLACK);
-THEME_CLR(Theme, clrMenuItemHighBlend, CLR_MENUITEMHIGHBLEND);
-THEME_CLR(Theme, clrSeparatorBorder, CLR_SEPARATORBORDER);
-THEME_CLR(Theme, clrDiskAlert, CLR_DISKALERT);
-THEME_CLR(Theme, clrMenuFontHeader, CLR_WHITE);
-THEME_CLR(Theme, clrMenuFontDate, CLR_WHITE);
-THEME_CLR(Theme, clrMenuFontDiscUsage, CLR_WHITE);
-THEME_CLR(Theme, clrMenuFontButton, CLR_WHITE);
-THEME_CLR(Theme, clrMenuFontTimers, CLR_WHITE);
-THEME_CLR(Theme, clrMenuFontTimersHeader, CLR_WHITE);
-THEME_CLR(Theme, clrMenuFontMessages, CLR_WHITE);
-THEME_CLR(Theme, clrMenuFontDetailViewText, CLR_WHITE);
-THEME_CLR(Theme, clrMenuFontDetailViewHeader, CLR_GRAY);
-THEME_CLR(Theme, clrMenuFontDetailViewHeaderTitle, CLR_BRIGHTBLUE);
-THEME_CLR(Theme, clrMenuFontMenuItem, CLR_WHITE);
-THEME_CLR(Theme, clrMenuFontMenuItemHigh, CLR_BRIGHTBLUE);
-THEME_CLR(Theme, clrMenuFontMenuItemTitle, CLR_BRIGHTBLUE);
-THEME_CLR(Theme, clrMenuFontMenuItemSep, CLR_GRAY);
-THEME_CLR(Theme, clrMenuHeader, CLR_MENUHEADER);
-THEME_CLR(Theme, clrMenuHeaderBlend, CLR_MENUHEADERBLEND);
-
-//BUTTONS
-THEME_CLR(Theme, clrButtonRed, CLR_BUTTONRED);
-THEME_CLR(Theme, clrButtonRedBorder, CLR_BUTTONREDBORDER);
-THEME_CLR(Theme, clrButtonGreen, CLR_BUTTONGREEN);
-THEME_CLR(Theme, clrButtonGreenBorder, CLR_BUTTONGREENBORDER);
-THEME_CLR(Theme, clrButtonYellow, CLR_BUTTONYELLOW);
-THEME_CLR(Theme, clrButtonYellowBorder, CLR_BUTTONYELLOWBORDER);
-THEME_CLR(Theme, clrButtonBlue, CLR_BUTTONBLUE);
-THEME_CLR(Theme, clrButtonBlueBorder, CLR_BUTTONBLUEBORDER);
-//MESSAGES
-THEME_CLR(Theme, clrMessageFont, CLR_WHITE);
-THEME_CLR(Theme, clrMessageStatus, CLR_MESSAGESTATUS);
-THEME_CLR(Theme, clrMessageInfo, CLR_MESSAGEINFO);
-THEME_CLR(Theme, clrMessageWarning, CLR_MESSAGEWARNING);
-THEME_CLR(Theme, clrMessageError, CLR_MESSAGEERROR);
-THEME_CLR(Theme, clrMessageBlend, CLR_TRANSBLACK);
-
-#include "config.c"
-cNopacityConfig config;
-#include "setup.c"
-#include "imageloader.c"
#include "nopacity.h"
-#include "helpers.c"
-#include "displaychannel.c"
-#include "textwindow.c"
-#include "timers.c"
-#include "menuitem.c"
-#include "menudetailview.c"
-#include "displaymenuview.c"
-#include "displaymenu.c"
-#include "displayreplay.c"
-#include "displayvolume.c"
-#include "displaytracks.c"
-#include "displaymessage.c"
-
-cNopacity::cNopacity(void) : cSkin("nOpacity", &::Theme) {
- config.setDynamicValues();
+#include "config.h"
+#include "displaychannel.h"
+#include "displaymenuview.h"
+#include "displaymenu.h"
+#include "displayreplay.h"
+#include "displayvolume.h"
+#include "displaytracks.h"
+#include "displaymessage.h"
+
+cNopacity::cNopacity(cImageCache *imgCache) : cSkin("nOpacity", &::Theme) {
+ displayMenu = NULL;
+ config.LoadThemeSpecificConfigs();
+ config.SetThemeSpecificDefaults();
+ config.SetThemeSetup();
+ config.SetPathes();
+ config.SetFontName();
+ geoManager = new cGeometryManager();
+ geoManager->SetGeometry();
+ fontManager = new cFontManager();
+ fontManager->SetFonts();
+ this->imgCache = imgCache;
+ imgCache->CreateCache();
}
const char *cNopacity::Description(void) {
@@ -152,26 +31,48 @@ const char *cNopacity::Description(void) {
}
cSkinDisplayChannel *cNopacity::DisplayChannel(bool WithInfo) {
- return new cNopacityDisplayChannel(WithInfo);
+ ReloadCaches();
+ return new cNopacityDisplayChannel(imgCache, WithInfo);
}
cSkinDisplayMenu *cNopacity::DisplayMenu(void) {
- return new cNopacityDisplayMenu;
+ ReloadCaches();
+ cNopacityDisplayMenu *menu = new cNopacityDisplayMenu(imgCache);
+ displayMenu = menu;
+ return menu;
}
cSkinDisplayReplay *cNopacity::DisplayReplay(bool ModeOnly) {
- return new cNopacityDisplayReplay(ModeOnly);
+ ReloadCaches();
+ return new cNopacityDisplayReplay(imgCache, ModeOnly);
}
cSkinDisplayVolume *cNopacity::DisplayVolume(void) {
- return new cNopacityDisplayVolume;
+ ReloadCaches();
+ return new cNopacityDisplayVolume(imgCache);
}
cSkinDisplayTracks *cNopacity::DisplayTracks(const char *Title, int NumTracks, const char * const *Tracks) {
- return new cNopacityDisplayTracks(Title, NumTracks, Tracks);
+ ReloadCaches();
+ return new cNopacityDisplayTracks(imgCache, Title, NumTracks, Tracks);
}
cSkinDisplayMessage *cNopacity::DisplayMessage(void) {
- return new cNopacityDisplayMessage;
+ ReloadCaches();
+ return new cNopacityDisplayMessage(imgCache);
}
+void cNopacity::ReloadCaches(void) {
+ if (geoManager->GeometryChanged() || imgCache->ThemeChanged()) {
+ int start = cTimeMs::Now();
+ config.LoadDefaults();
+ config.SetThemeSpecificDefaults();
+ config.SetThemeSetup();
+ config.SetFontName();
+ geoManager->SetGeometry();
+ fontManager->DeleteFonts();
+ fontManager->SetFonts();
+ imgCache->Reload();
+ dsyslog("nopacity: Cache reloaded in %d ms", int(cTimeMs::Now()-start));
+ }
+}
diff --git a/nopacity.h b/nopacity.h
index 8144ee0..5b20654 100644
--- a/nopacity.h
+++ b/nopacity.h
@@ -3,10 +3,17 @@
#include <vdr/skins.h>
#include <vdr/videodir.h>
+#include "imagecache.h"
+
+class cNopacityDisplayMenu;
class cNopacity : public cSkin {
+private:
+ cNopacityDisplayMenu *displayMenu;
+ cImageCache *imgCache;
+ void ReloadCaches(void);
public:
- cNopacity(void);
+ cNopacity(cImageCache *imgCache);
virtual const char *Description(void);
virtual cSkinDisplayChannel *DisplayChannel(bool WithInfo);
virtual cSkinDisplayMenu *DisplayMenu(void);
@@ -15,4 +22,5 @@ public:
virtual cSkinDisplayTracks *DisplayTracks(const char *Title, int NumTracks, const char * const *Tracks);
virtual cSkinDisplayMessage *DisplayMessage(void);
};
+
#endif //__NOPACITY_H
diff --git a/po/ca_ES.po b/po/ca_ES.po
new file mode 100644
index 0000000..d2c04ca
--- /dev/null
+++ b/po/ca_ES.po
@@ -0,0 +1,702 @@
+# VDR plugin language source file.
+# Copyright (C) 2012
+# This file is distributed under the same license as the PACKAGE package.
+# louis, 2012.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: skinnopacity 0.0.1\n"
+"Report-Msgid-Bugs-To: <see README>\n"
+"POT-Creation-Date: 2014-05-24 15:11+0200\n"
+"PO-Revision-Date: 2013-03-19 22:56+0100\n"
+"Last-Translator: Gabychan <gbonich at gmail.com>\n"
+"Language-Team: \n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Català\n"
+"X-Poedit-Country: Catalunya\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+msgid "No Cast available"
+msgstr ""
+
+msgid "Cast"
+msgstr ""
+
+msgid "EPG Info"
+msgstr ""
+
+msgid "Reruns"
+msgstr ""
+
+msgid "Recording Information"
+msgstr ""
+
+msgid "Image Galery"
+msgstr ""
+
+msgid "TheTVDB Info"
+msgstr ""
+
+msgid "TheTVDB Information"
+msgstr ""
+
+msgid "Episode"
+msgstr ""
+
+msgid "Season"
+msgstr ""
+
+msgid "Episode Overview"
+msgstr ""
+
+msgid "First aired"
+msgstr ""
+
+msgid "Guest Stars"
+msgstr ""
+
+msgid "TheMovieDB Rating"
+msgstr ""
+
+msgid "Series Overview"
+msgstr ""
+
+msgid "Genre"
+msgstr ""
+
+msgid "Network"
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
+msgid "TheMovieDB Information"
+msgstr ""
+
+msgid "Original Title"
+msgstr ""
+
+msgid "Tagline"
+msgstr ""
+
+msgid "Overview"
+msgstr ""
+
+msgid "yes"
+msgstr "sí"
+
+msgid "no"
+msgstr "no"
+
+msgid "Adult"
+msgstr ""
+
+msgid "Collection"
+msgstr ""
+
+msgid "Budget"
+msgstr ""
+
+msgid "Revenue"
+msgstr ""
+
+msgid "Homepage"
+msgstr ""
+
+msgid "Release Date"
+msgstr ""
+
+msgid "Runtime"
+msgstr ""
+
+msgid "minutes"
+msgstr ""
+
+msgid "TheMovieDB Popularity"
+msgstr ""
+
+msgid "TheMovieDB Vote Average"
+msgstr ""
+
+msgid "free"
+msgstr "lliure"
+
+msgid "Volume"
+msgstr "Volum"
+
+msgid "images"
+msgstr "imatges"
+
+msgid "min"
+msgstr "min"
+
+msgid "Reruns of "
+msgstr ""
+
+msgid "No reruns found"
+msgstr ""
+
+msgid "Size"
+msgstr "Mida"
+
+msgid "cut"
+msgstr "retalla"
+
+msgid "Length"
+msgstr "Durada"
+
+msgid "Format"
+msgstr "Format"
+
+msgid "Est. bitrate"
+msgstr "Bitrate estimat"
+
+msgid "Search timer"
+msgstr "Cerca timer"
+
+msgid "Transp."
+msgstr "Transponedor"
+
+msgid "No EPG Information found"
+msgstr "No hi ha informació EPG"
+
+msgid "Duration"
+msgstr "Durada"
+
+msgid "recording"
+msgstr "gravació"
+
+msgid "recordings"
+msgstr "gravacions"
+
+msgid "new"
+msgstr "nou"
+
+msgid "Font"
+msgstr "Font"
+
+msgid "VDR Menu: Common Settings"
+msgstr "Menu VDR: Preferències"
+
+msgid "VDR Menu: Main and Setup Menu"
+msgstr "Menu VDR: Menú principal i configuració"
+
+msgid "VDR Menu: Schedules Menu"
+msgstr "Menu VDR: Menú programació"
+
+msgid "VDR Menu: Channels Menu"
+msgstr "Menu VDR: Menú canals"
+
+msgid "VDR Menu: Timers Menu"
+msgstr "Menu VDR: Menú timer"
+
+msgid "VDR Menu: Recordings Menu"
+msgstr "Menu VDR: Menu gravacions"
+
+msgid "VDR Menu: Detailed EPG & Recordings View"
+msgstr ""
+
+msgid "Channel Switching"
+msgstr "Canvi de canal"
+
+msgid "Replay"
+msgstr "Reproducció"
+
+msgid "Audio Tracks"
+msgstr "Pistes d'àudio"
+
+msgid "Messages"
+msgstr "Missatges"
+
+msgid "Image Caching"
+msgstr "Cache d'imatge"
+
+msgid "right"
+msgstr "dreta"
+
+msgid "left"
+msgstr "esquerra"
+
+msgid "Carriage Return"
+msgstr "Retorn"
+
+msgid "Forward and Back again"
+msgstr "Avançar i retrocedir de nou"
+
+msgid "off"
+msgstr "off"
+
+msgid "slow"
+msgstr "lent"
+
+msgid "medium"
+msgstr "normal"
+
+msgid "fast"
+msgstr "ràpid"
+
+msgid "auto"
+msgstr "auto"
+
+msgid "Create Log Messages for image loading"
+msgstr "Crea Log d'imatges carregades"
+
+msgid "Number of Default Menu Entries per Page"
+msgstr "Nombre d'entrades de menú per pàgina"
+
+msgid "Adjust Font Size - Default Menu Item"
+msgstr "Ajust Mida de la Font - Opció de Menú"
+
+msgid "Adjustment of narrow menus"
+msgstr "Ajust dels menús limitats"
+
+msgid "Scale Video size to fit into menu window"
+msgstr "Ajust de la mida de video a la finestra del menú"
+
+msgid "Header Height (Percent of OSD Height)"
+msgstr "Alçada de la capçalera (% Alçada OSD)"
+
+msgid "Footer Height (Percent of OSD Height)"
+msgstr "Alçada del peu de pàgina (% Alçada OSD)"
+
+msgid "Rounded Corners for menu items and buttons"
+msgstr "Cantells rodons als elements de menú i botons"
+
+msgid "Radius of rounded corners"
+msgstr "Radi dels cantells rodons"
+
+msgid "Use Channel Logo background"
+msgstr "Utilitza logo del canal de fons"
+
+msgid "Fade-In Time in ms (Zero for switching off fading)"
+msgstr "Fosa d'entrada, temps en ms (0 per desactivació)"
+
+msgid "Menu Items Scroll Style"
+msgstr "Estil del Menu desplaçament"
+
+msgid "Menu Items Scrolling Speed"
+msgstr "Velocitat desplaçament elements de menú"
+
+msgid "Menu Items Scrolling Delay in s"
+msgstr "Retard desplaçament elements de menú en s"
+
+msgid "Adjust Font Size - Header"
+msgstr "Ajusta mida de la Font - capçalera"
+
+msgid "Adjust Font Size - Date"
+msgstr "Ajusta mida de la Font - Data"
+
+msgid "Adjust Font Size - Color Buttons"
+msgstr "Ajusta mida de la Font - Botons de color"
+
+msgid "Adjust Font Size - Messages"
+msgstr "Ajusta mida de la Font - Missatges"
+
+msgid "Adjust Font Size - Detail View Text"
+msgstr "Ajusta mida de la Font - Vista detall del text"
+
+msgid "Adjust Font Size - Detail View Text Small"
+msgstr "Ajusta mida de la Font - Vista detall text petit"
+
+msgid "Adjust Font Size - Detail View Header"
+msgstr "Ajusta mida de la Font - Vista detall capçalera"
+
+msgid "Adjust Font Size - Detail View Header Large"
+msgstr "Ajusta mida de la Font - Vista més detall capçalera"
+
+msgid "\"VDR\" plus VDR version"
+msgstr "\"VDR\" versió plus VDR"
+
+msgid "only VDR version"
+msgstr "només versió VDR"
+
+msgid "no title"
+msgstr "sense títol"
+
+msgid "free time in hours"
+msgstr "temps lliure en hores"
+
+msgid "free space in GB"
+msgstr "espai lliure en GB"
+
+msgid "small without logo"
+msgstr "petit sense logo"
+
+msgid "Use narrow main menu"
+msgstr "Utilitza menú principal limitat"
+
+msgid "Width (Percent of OSD Width)"
+msgstr "Amplada (% amplada OSD)"
+
+msgid "Use narrow setup menu"
+msgstr "Utilitza configuració limitada"
+
+msgid "Number of entires per page"
+msgstr "Nombre d'entrades per pàgina"
+
+msgid "Use menu icons"
+msgstr "Utilitza menú d'icones"
+
+msgid "Main menu title style"
+msgstr "Estil de títol al menú principal"
+
+msgid "Display Disk Usage"
+msgstr "Mostra Ús del disc"
+
+msgid "Size (square, Percent of OSD Width)"
+msgstr "Mida (quadrat, % amplada OSD)"
+
+msgid "Free Disc Display"
+msgstr "Mostra espai lliure al disc"
+
+msgid "Adjust Font Size - free"
+msgstr "Ajusta mida de la Font - lliure"
+
+msgid "Adjust Font Size - percent"
+msgstr "Ajusta mida de la Font - percentatge"
+
+msgid "Display Timers"
+msgstr "Mostra timers"
+
+msgid "Maximum number of Timers"
+msgstr "Nombre màxim de timers"
+
+msgid "Width of Timers (Percent of OSD Width)"
+msgstr "Amplada dels timers (% amplada OSD)"
+
+msgid "Width of Channel Logos (Percent of Timer Width)"
+msgstr "Ample dels Logos Canal (% Amplada temporitzador)"
+
+msgid "Adjust Font Size - Title"
+msgstr "Ajusta mida de la Font - Títol"
+
+msgid "Show Timer Conflicts"
+msgstr "Mostra conflictes timers"
+
+msgid "Header Logo Width"
+msgstr "Amplada logo capçalera"
+
+msgid "Header Logo Height"
+msgstr "Alçada logo capçalera"
+
+msgid "Adjust Font Size - Menu Items"
+msgstr "Ajusta mida de la font - Elements de menú"
+
+msgid "window"
+msgstr "finestre"
+
+msgid "full screen"
+msgstr "pantalla completa"
+
+msgid "Use narrow menu"
+msgstr "Utilitza menú limitat"
+
+msgid "Mode of EPG Window"
+msgstr "Mode pantalla EPG"
+
+msgid "EPG Window Fade-In Time in ms (Zero for switching off fading)"
+msgstr "Fosa d'entrada finestra EPG, temps en ms (0 per desactivació)"
+
+msgid "EPG Window Display Delay in s"
+msgstr "Temps visualització finestra EPG en s"
+
+msgid "EPG Window Scroll Delay in s"
+msgstr "Temps retard desplaçament finestra EPG en s"
+
+msgid "EPG Window Text Scrolling Speed"
+msgstr "Velocitat desplaçament text finestra EPG"
+
+msgid "Height of EPG Info Window (Percent of OSD Height)"
+msgstr "Alçada Finestra Info EPG (% alçada OSD)"
+
+msgid "Adjust Font Size - Menu Item"
+msgstr "Ajusta mida de la Font - Element de menú"
+
+msgid "Adjust Font Size - Menu Item Small"
+msgstr "Ajusta mida de la Font - Element petit de menú"
+
+msgid "Adjust Font Size - EPG Info Window"
+msgstr "Ajusta mida de la Font - Finestra Info EPG"
+
+msgid "Adjust Font Size - EPG Info Window Header"
+msgstr "Ajusta mida de la Font - Finestra Info EPG encapçalament "
+
+msgid "Transponder Information"
+msgstr "Informació Transponedor"
+
+msgid "Current Schedule"
+msgstr "Programació actual"
+
+msgid "Plain Channels"
+msgstr "Canals plans"
+
+msgid "Menu Items display mode"
+msgstr "Mode visualització Elements de menú"
+
+msgid "Display schedules with time info"
+msgstr "Veure horaris amb informació en temps"
+
+msgid "Number of EPG Entries in Schedules Info Window"
+msgstr "Nombre d'entrades EPG a la Finestra de Programació"
+
+msgid "never"
+msgstr "mai"
+
+msgid "always"
+msgstr "sempre"
+
+msgid "only if no tvscraper media available"
+msgstr "Sols si tvscraper media no disponible"
+
+msgid "Mode of recording Window"
+msgstr "Mode de gravació"
+
+msgid "Border around detailed recording view"
+msgstr "Vora al voltant de vista registre detallat"
+
+msgid "Use folder poster if available"
+msgstr "Utilitzeu carpeta cartell si està disponible"
+
+msgid "Width of manually set recording poster"
+msgstr "Ample del cartell de gravació ajustat manualment"
+
+msgid "Height of manually set recording poster"
+msgstr "Alçada del cartell de gravació ajustat manualment"
+
+msgid "if exists"
+msgstr "si existeix"
+
+msgid "Border around view"
+msgstr ""
+
+msgid "Scroll Speed with up / down (number of lines)"
+msgstr ""
+
+msgid "Header Height detailed EPG view (Perc. of OSD Height)"
+msgstr ""
+
+msgid "Header Height detailed recording view (Perc. of OSD Height)"
+msgstr ""
+
+msgid "Number of reruns to display"
+msgstr "Nombre de reemissions a mostrar"
+
+msgid "Use Subtitle for reruns"
+msgstr "Utilitza subtítols a les reemissions"
+
+msgid "EPG Image Width"
+msgstr ""
+
+msgid "EPG Image Height"
+msgstr ""
+
+msgid "Large EPG Image Width"
+msgstr ""
+
+msgid "Large EPG Image Height"
+msgstr ""
+
+msgid "transparent channel logo"
+msgstr "Logo del canal transparent"
+
+msgid "full osd width"
+msgstr "Amplada total OSD"
+
+msgid "do not display"
+msgstr "no mostrar"
+
+msgid "top"
+msgstr ""
+
+msgid "middle"
+msgstr ""
+
+msgid "bottom"
+msgstr ""
+
+msgid "show elapsed time"
+msgstr "mostra temps transcorregut"
+
+msgid "show remaining time"
+msgstr "mostra temps restant"
+
+msgid "Height of Channel Display (Percent of OSD Height)"
+msgstr "Alçada Visualització Canal (% alçada OSD)"
+
+msgid "Left & Right Border Width"
+msgstr "Amplada vores esquerra i dreta"
+
+msgid "Bottom Border Height"
+msgstr "Alçada vora botó"
+
+msgid "Background Transparency in Percent"
+msgstr "Transparència de fons en percentatge"
+
+msgid "Background Style"
+msgstr "Estil del Fons"
+
+msgid "Rounded Corners"
+msgstr "Cantells rodons"
+
+msgid "Vertical Channel Logo Alignment"
+msgstr ""
+
+msgid "Channel Logo Position"
+msgstr "Posició Logo Canal"
+
+msgid "Channel Logo original Width"
+msgstr "Amplada Original Logo del canal"
+
+msgid "Channel Logo original Height"
+msgstr "Alçada Original Logo del canal"
+
+msgid "Kind of time display for current schedule"
+msgstr "Tipus de visualització per la programació actual"
+
+msgid "Display Signal Strength & Quality"
+msgstr "Mostra qualitat i intensitat del senyal"
+
+msgid "Display Channel Source & Rec. Info"
+msgstr ""
+
+msgid "Display Poster or Fanart from TVScraper"
+msgstr "Mostra Poster o Fanart de TVScraper"
+
+msgid "Border in Pixel"
+msgstr "Final del Pixel"
+
+msgid "Display previous and next Channel Group"
+msgstr "Mostra grups de canals anterior i posterior"
+
+msgid "Adjust Font Size - EPG Text"
+msgstr "Ajusta mida de la Font - Text EPG"
+
+msgid "Adjust Font Size - EPG Infotext"
+msgstr "Ajusta mida de la Font - Infotext EPG"
+
+msgid "Adjust Font Size - Channel Source Info"
+msgstr "Ajusta mide de la Font - Info del Canal"
+
+msgid "Adjust Font Size - Channel Group"
+msgstr "Ajusta mida de la Font - Grup de canals"
+
+msgid "Adjust Font Size - Next/Prev Channel Group"
+msgstr "Ajusta mida de la Font - Post/Ant Grup Canals"
+
+msgid "Height of Replay Display (Percent of OSD Height)"
+msgstr "Alçada Visualització Reproducció (% alcada OSD)"
+
+msgid "Adjust Font Size - Text"
+msgstr "Ajusta mida de la Font - Text"
+
+msgid "Width of Tracks Display (Percent of OSD Width)"
+msgstr "Amplada Visualització Pistes (% amplada OSD)"
+
+msgid "Height of Track Items (in pixels)"
+msgstr "Alçada Elements de Pistes (en píxels)"
+
+msgid "Position (0: bot. center, 1: bot. left, ... , 7: bot. right)"
+msgstr "Posició (0: bot. central, 1: bot. esq., ... , 7: bot. dret)"
+
+msgid "Border Left / Right"
+msgstr "Vora esquerra / dreta"
+
+msgid "Border Top / Bottom"
+msgstr "Vora superior / inferior"
+
+msgid "Adjust Font Size - Buttons"
+msgstr "Ajusta mida de la Font - Botons"
+
+msgid "Width of Message Display (Percent of OSD Height)"
+msgstr "Amplada del missatge (% Amplada OSD)"
+
+msgid "Height of Message Display (Percent of OSD Height)"
+msgstr "Alçada del missatge (% alçada OSD)"
+
+msgid "Adjust Font Size"
+msgstr "Ajusta mida de la Font"
+
+msgid "Volume Display"
+msgstr "Mostra volum"
+
+msgid "Width of Volume Display (Percent of OSD Height)"
+msgstr "Amplada Visualització volum (% Amplada OSD)"
+
+msgid "Height of Volume Display (Percent of OSD Height)"
+msgstr "Alçada Visualització volum (% Alçada OSD)"
+
+msgid "Limit Logo Cache"
+msgstr "Limit Cache Logo"
+
+msgid "Maximal number of logos to cache"
+msgstr "Màxim nombre de logos a la cache"
+
+msgid "Number of logos to cache at start"
+msgstr "Nombre de logos a la cache al començar"
+
+msgid "Cache Sizes"
+msgstr "Mida cache"
+
+msgid "Menu Icon cache"
+msgstr "Menu cache icona"
+
+msgid "Skin Icon image cache"
+msgstr "Pell Icona imatge cache"
+
+msgid "Logo cache"
+msgstr "Cache Logo"
+
+msgid "Menu Item Logo cache"
+msgstr "Element Menu cache Logo"
+
+msgid "Timer Logo cache"
+msgstr "Cache Timer logo"
+
+msgid "Background Images cache"
+msgstr "Cache imatges de fons"
+
+msgid "conflict"
+msgstr "conflicte"
+
+msgid "conflicts"
+msgstr "conflictes"
+
+#~ msgid "Display additional EPG Pictures in detailed recording View"
+#~ msgstr "Mostra imatges EPG addicionals a vista detallada gravacions"
+
+#~ msgid "Number of EPG pictures to display"
+#~ msgstr "Nombre d'imatges EPG a mostrar"
+
+#~ msgid "Border around detailed EPG view"
+#~ msgstr "Vora al voltant de vista detallada EPG"
+
+#~ msgid "Display Reruns in detailed EPG View"
+#~ msgstr "Mostra Reemissions a vista detallada EPG"
+
+#~ msgid "Display additional EPG Pictures in detailed EPG View"
+#~ msgstr "Mostra imatges addicionals a vista detallada EPG"
+
+#~ msgid "Detail EPG View EPG Image Width"
+#~ msgstr "Amplada imatges a vista detallada EPG"
+
+#~ msgid "Detail EPG View EPG Image Height"
+#~ msgstr "Alçada imatges a vista detallada EPG"
+
+#~ msgid "Detail EPG View additional EPG Image Width"
+#~ msgstr "Amplada imatges addicionals a vista detallada EPG"
+
+#~ msgid "Detail EPG View additional EPG Image Height"
+#~ msgstr "Alçada imatges addicionals a vista detallada EPG"
+
+#~ msgid "RERUNS OF THIS SHOW"
+#~ msgstr "REEMISSIONS"
+
+#~ msgid "Actors"
+#~ msgstr "Actors"
+
+#~ msgid "Display Channel Source information"
+#~ msgstr "Mostra informació del canal"
diff --git a/po/de_DE.po b/po/de_DE.po
index 7b753ac..350c532 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: skinnopacity 0.0.1\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-03-24 11:09+0100\n"
+"POT-Creation-Date: 2014-05-24 15:11+0200\n"
"PO-Revision-Date: 2012-11-11 17:49+0200\n"
"Last-Translator: louis\n"
"Language-Team: \n"
@@ -17,14 +17,125 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+msgid "No Cast available"
+msgstr "Keine Besetzung vorhanden"
+
+msgid "Cast"
+msgstr "Besetzung"
+
+msgid "EPG Info"
+msgstr "EPG Info"
+
+msgid "Reruns"
+msgstr "Wiederholungen"
+
+msgid "Recording Information"
+msgstr "Aufnahme Infos"
+
+msgid "Image Galery"
+msgstr "Bildergalerie"
+
+msgid "TheTVDB Info"
+msgstr "TheTVDB Info"
+
+msgid "TheTVDB Information"
+msgstr "TheTVDB Information"
+
+msgid "Episode"
+msgstr "Episode"
+
+msgid "Season"
+msgstr "Staffel"
+
+msgid "Episode Overview"
+msgstr "Episodenüberblick"
+
+msgid "First aired"
+msgstr "Erstausstrahlung"
+
+msgid "Guest Stars"
+msgstr "Gast Stars"
+
+msgid "TheMovieDB Rating"
+msgstr "TheMovieDB Wertung"
+
+msgid "Series Overview"
+msgstr "Serienüberblick"
+
+msgid "Genre"
+msgstr "Genre"
+
+msgid "Network"
+msgstr "Sendeanstalt"
+
+msgid "Status"
+msgstr "Status"
+
+msgid "TheMovieDB Information"
+msgstr "TheMovieDB Information"
+
+msgid "Original Title"
+msgstr "Original Titel"
+
+msgid "Tagline"
+msgstr "Zusammenfassung"
+
+msgid "Overview"
+msgstr "Überblick"
+
+msgid "yes"
+msgstr "ja"
+
+msgid "no"
+msgstr "nein"
+
+msgid "Adult"
+msgstr "Nur für Erwachsene"
+
+msgid "Collection"
+msgstr "Kollektion"
+
+msgid "Budget"
+msgstr "Budget"
+
+msgid "Revenue"
+msgstr "Einnahmen"
+
+msgid "Homepage"
+msgstr "Homepage"
+
+msgid "Release Date"
+msgstr "Veröffentlicht"
+
+msgid "Runtime"
+msgstr "Laufzeit"
+
+msgid "minutes"
+msgstr "Minuten"
+
+msgid "TheMovieDB Popularity"
+msgstr "TheMovieDB Popularität"
+
+msgid "TheMovieDB Vote Average"
+msgstr "TheMovieDB durchschnittliche Bewertung"
+
msgid "free"
msgstr "frei"
msgid "Volume"
msgstr "Lautstärke"
-msgid "RERUNS OF THIS SHOW"
-msgstr "Wiederholungen dieser Sendung"
+msgid "images"
+msgstr "Bilder"
+
+msgid "min"
+msgstr "min"
+
+msgid "Reruns of "
+msgstr "Wiederholungen der Sendung "
+
+msgid "No reruns found"
+msgstr "Keine Wiederholungen gefunden"
msgid "Size"
msgstr "Größe"
@@ -41,15 +152,18 @@ msgstr "Format"
msgid "Est. bitrate"
msgstr "Geschätzte Bitrate"
+msgid "Search timer"
+msgstr "Suchtimer"
+
msgid "Transp."
msgstr "Transp."
+msgid "No EPG Information found"
+msgstr "Keine EPG Informationen verfügbar"
+
msgid "Duration"
msgstr "Dauer"
-msgid "min"
-msgstr "min"
-
msgid "recording"
msgstr "Aufnahme"
@@ -80,6 +194,9 @@ msgstr "VDR Menü: Timer Menü"
msgid "VDR Menu: Recordings Menu"
msgstr "VDR Menü: Aufzeichnungs Menü"
+msgid "VDR Menu: Detailed EPG & Recordings View"
+msgstr "Detaillierte EPG- & Aufnahmeansicht"
+
msgid "Channel Switching"
msgstr "Kanalwechsel"
@@ -92,12 +209,21 @@ msgstr "Audio Spuren"
msgid "Messages"
msgstr "Nachrichten"
+msgid "Image Caching"
+msgstr "Bilder Cache"
+
msgid "right"
msgstr "rechts"
msgid "left"
msgstr "links"
+msgid "Carriage Return"
+msgstr "Wagenrücklauf"
+
+msgid "Forward and Back again"
+msgstr "Vor- und wieder Rückwärts"
+
msgid "off"
msgstr "aus"
@@ -110,6 +236,12 @@ msgstr "mittel"
msgid "fast"
msgstr "schnell"
+msgid "auto"
+msgstr "auto"
+
+msgid "Create Log Messages for image loading"
+msgstr "Log Nachrichten beim Bilder laden erzeugen"
+
msgid "Number of Default Menu Entries per Page"
msgstr "Anzahl der Default-Menüelemente pro Seite"
@@ -125,9 +257,6 @@ msgstr "TV-Bildgröße in Menüfenster einpassen"
msgid "Header Height (Percent of OSD Height)"
msgstr "Header Höhe (in % der OSD Höhe)"
-msgid "Header Icon Size (Square Header Menu Icons)"
-msgstr "Größe der quadratischen Headericons"
-
msgid "Footer Height (Percent of OSD Height)"
msgstr "Footer Höhe (in % der OSD Höhe)"
@@ -137,9 +266,15 @@ msgstr "Abgerundete Ecken für Menüelemente und Buttons"
msgid "Radius of rounded corners"
msgstr "Radius der abgerundeten Ecken"
+msgid "Use Channel Logo background"
+msgstr "Hintergrund für Kanallogos benutzen"
+
msgid "Fade-In Time in ms (Zero for switching off fading)"
msgstr "Fade-In Zeit in ms (Null zum Abschalten)"
+msgid "Menu Items Scroll Style"
+msgstr "Scrollstil der Menüelemente"
+
msgid "Menu Items Scrolling Speed"
msgstr "Scroll Geschwindigkeit der Menüelemente"
@@ -161,6 +296,9 @@ msgstr "Schriftgröße anpassen - Nachrichten"
msgid "Adjust Font Size - Detail View Text"
msgstr "Schriftgröße anpassen - Text EPG Detailanzeige"
+msgid "Adjust Font Size - Detail View Text Small"
+msgstr "Schriftgröße anpassen - Text EPG Detailanzeige klein"
+
msgid "Adjust Font Size - Detail View Header"
msgstr "Schriftgröße anpassen - Header EPG Detailanzeige"
@@ -176,6 +314,15 @@ msgstr "nur VDR Version"
msgid "no title"
msgstr "kein Titel"
+msgid "free time in hours"
+msgstr "freie Zeit in Stunden"
+
+msgid "free space in GB"
+msgstr "freier Platz in GB"
+
+msgid "small without logo"
+msgstr "klein ohne Logo"
+
msgid "Use narrow main menu"
msgstr "Schmales Hauptmenü verwenden"
@@ -185,12 +332,12 @@ msgstr "Breite (% der OSD Breite)"
msgid "Use narrow setup menu"
msgstr "Schmales Setup Menü verwenden"
+msgid "Number of entires per page"
+msgstr "Menüelemente pro Seite"
+
msgid "Use menu icons"
msgstr "Menü Icons benutzen"
-msgid "Icon Size (Square)"
-msgstr "Icon Größe (quadratisch)"
-
msgid "Main menu title style"
msgstr "Titel Stil im Hauptmenü"
@@ -200,6 +347,9 @@ msgstr "Festplattenstatus anzeigen"
msgid "Size (square, Percent of OSD Width)"
msgstr "Größe (quadr., % der OSD Breite)"
+msgid "Free Disc Display"
+msgstr "Anzeige des verfügbaren Plattenplatzes"
+
msgid "Adjust Font Size - free"
msgstr "Schriftgröße anpassen - frei"
@@ -215,11 +365,8 @@ msgstr "Maximale Timer Anzahl"
msgid "Width of Timers (Percent of OSD Width)"
msgstr "Breite der Timer (% der OSD Breite)"
-msgid "Channel Logo Width"
-msgstr "Breite der Kanallogos"
-
-msgid "Channel Logo Height"
-msgstr "Höhe der Kanallogos"
+msgid "Width of Channel Logos (Percent of Timer Width)"
+msgstr "Channel Logo Breite (% der Timer Breite)"
msgid "Adjust Font Size - Title"
msgstr "Schriftgröße anpassen - Titel"
@@ -236,18 +383,18 @@ msgstr "Header Logo Höhe"
msgid "Adjust Font Size - Menu Items"
msgstr "Schriftgröße anpassen - Menüelemente"
-msgid "never"
-msgstr "nie"
-
-msgid "if exists"
-msgstr "falls vorhanden"
+msgid "window"
+msgstr "Fenster"
-msgid "always"
-msgstr "immer"
+msgid "full screen"
+msgstr "Vollbild"
msgid "Use narrow menu"
msgstr "Schmales Menü verwenden"
+msgid "Mode of EPG Window"
+msgstr "EPG Fenster Modus"
+
msgid "EPG Window Fade-In Time in ms (Zero for switching off fading)"
msgstr "Fade-In Zeit des EPG Fensters in ms (Null zum Abschalten)"
@@ -263,57 +410,111 @@ msgstr "Text Scroll Geschwindigkeit des EPG Fensters"
msgid "Height of EPG Info Window (Percent of OSD Height)"
msgstr "Höhe des EPG Info Fensters (% der OSD Höhe)"
-msgid "Display Reruns in detailed EPG View"
-msgstr "Wiederholungen in der detailierten EPG Ansicht anzeigen"
+msgid "Adjust Font Size - Menu Item"
+msgstr "Schriftgröße anpassen - Menüelement"
-msgid "Number of reruns to display"
-msgstr "Anzahl der dargestellten Wiederholungen"
+msgid "Adjust Font Size - Menu Item Small"
+msgstr "Schriftgröße anpassen - Menüelement klein"
-msgid "Use Subtitle for reruns"
-msgstr "Untertitel für Wiederholungssuche nutzen"
+msgid "Adjust Font Size - EPG Info Window"
+msgstr "Schriftgröße anpassen - EPG Infofenster"
-msgid "Display additional EPG Pictures in detailed EPG View"
-msgstr "Weitere EPG Bilder in der detaillierten EPG Ansicht anzeigen"
+msgid "Adjust Font Size - EPG Info Window Header"
+msgstr "Schriftgröße anpassen - EPG Infofenster Header"
-msgid "Number of EPG pictures to display"
-msgstr "Anzahl der zusätzlichen EPG Bilder"
+msgid "Transponder Information"
+msgstr "Transponder Information"
-msgid "Detail EPG View Logo Width"
-msgstr "Breite der Kanallogos in der EPG Detailanzeige"
+msgid "Current Schedule"
+msgstr "Aktuelles Programm"
-msgid "Detail EPG View Logo Height"
-msgstr "Höhe der Kanallogos in der EPG Detailanzeige"
+msgid "Plain Channels"
+msgstr "Nur Kanäle"
-msgid "Detail EPG View EPG Image Width"
-msgstr "Breite der EPG Bilder in der EPG Detailanzeige"
+msgid "Menu Items display mode"
+msgstr "Anzeigemodus Menüelemente"
-msgid "Detail EPG View EPG Image Height"
-msgstr "Höhe der EPG Bilder in der EPG Detailanzeige"
+msgid "Display schedules with time info"
+msgstr "Programm mit Zeitinformation anzeigen"
-msgid "Detail EPG View additional EPG Image Width"
-msgstr "Breite der zusätzlichen EPG Bilder"
+msgid "Number of EPG Entries in Schedules Info Window"
+msgstr "Anzahl der EPG Einträge im Programm Info Fenster"
-msgid "Detail EPG View additional EPG Image Height"
-msgstr "Höhe der zusätzlichen EPG Bilder"
+msgid "never"
+msgstr "nie"
-msgid "Adjust Font Size - Menu Item"
-msgstr "Schriftgröße anpassen - Menüelement"
+msgid "always"
+msgstr "immer"
-msgid "Adjust Font Size - Menu Item Small"
-msgstr "Schriftgröße anpassen - Menüelement klein"
+msgid "only if no tvscraper media available"
+msgstr "falls keine tvscraper medien verfügbar"
-msgid "Adjust Font Size - EPG Info Window"
-msgstr "Schriftgröße anpassen - EPG Infofenster"
+msgid "Mode of recording Window"
+msgstr "Aufnahme Fenster Modus"
+
+msgid "Border around detailed recording view"
+msgstr "Rahmen um detailierte Aufnahmeansicht"
+
+msgid "Use folder poster if available"
+msgstr "Zeige Poster für Ordner falls verfügbar"
+
+msgid "Width of manually set recording poster"
+msgstr "Breite der manuell gesetzen Poster"
+
+msgid "Height of manually set recording poster"
+msgstr "Höhe der manuell gesetzten Poster"
+
+msgid "if exists"
+msgstr "falls vorhanden"
+
+msgid "Border around view"
+msgstr "Rahmen um Ansicht"
+
+msgid "Scroll Speed with up / down (number of lines)"
+msgstr "Scroll Geschwindigkeit mit hoch / runter (Anz. Zeilen)"
+
+msgid "Header Height detailed EPG view (Perc. of OSD Height)"
+msgstr "Header Höhe in det. EPG Ansicht (% OSD Höhe)"
-msgid "Display additional EPG Pictures in detailed recording View"
-msgstr "Weitere EPG Bilder in der detaillierten Aufnahmeansicht anzeigen"
+msgid "Header Height detailed recording view (Perc. of OSD Height)"
+msgstr "Header Höhe in det. Aufnahmeansicht (% der OSD Höhe)"
-msgid "Folder Icon Size"
-msgstr "Order Icon Größe"
+msgid "Number of reruns to display"
+msgstr "Anzahl der dargestellten Wiederholungen"
+
+msgid "Use Subtitle for reruns"
+msgstr "Untertitel für Wiederholungssuche nutzen"
+
+msgid "EPG Image Width"
+msgstr "EPG Bild Breite"
+
+msgid "EPG Image Height"
+msgstr "EPG Bild Höhe"
+
+msgid "Large EPG Image Width"
+msgstr "Großes EPG Bild Breite"
+
+msgid "Large EPG Image Height"
+msgstr "Großes EPG Bild Höhe"
+
+msgid "transparent channel logo"
+msgstr "Kanallogo transparent"
+
+msgid "full osd width"
+msgstr "volle OSD Breite"
msgid "do not display"
msgstr "nicht anzeigen"
+msgid "top"
+msgstr "oben"
+
+msgid "middle"
+msgstr "mittig"
+
+msgid "bottom"
+msgstr "unten"
+
msgid "show elapsed time"
msgstr "vergangene Zeit anzeigen"
@@ -329,11 +530,26 @@ msgstr "Breite des linken und rechten Rands"
msgid "Bottom Border Height"
msgstr "Höhe des unteren Rands"
+msgid "Background Transparency in Percent"
+msgstr "Hintergrundtransparenz in %"
+
+msgid "Background Style"
+msgstr "Hintergrund Stil"
+
+msgid "Rounded Corners"
+msgstr "Abgerundete Ecken"
+
+msgid "Vertical Channel Logo Alignment"
+msgstr "Vertikale Ausrichtung des Kanallogos"
+
msgid "Channel Logo Position"
msgstr "Kanallogo Position"
-msgid "Channel Logo Border"
-msgstr "Rand um die Kanallogos"
+msgid "Channel Logo original Width"
+msgstr "Kanallogo original Breite"
+
+msgid "Channel Logo original Height"
+msgstr "Kanallogo original Höhe"
msgid "Kind of time display for current schedule"
msgstr "Art der Zeitanzeige für die laufende Sendung"
@@ -341,11 +557,17 @@ msgstr "Art der Zeitanzeige für die laufende Sendung"
msgid "Display Signal Strength & Quality"
msgstr "Signalstärke- und Qualität anzeigen"
-msgid "Screen Resolution Icon Size"
-msgstr "Größe des Icons zur Anzeige der Bildschirmauflösung"
+msgid "Display Channel Source & Rec. Info"
+msgstr "Kanal- und Aufnahmeinfo anzeigen"
-msgid "Status Icons Size"
-msgstr "Status Icon Größe"
+msgid "Display Poster or Fanart from TVScraper"
+msgstr "Poster bzw. Fanart von TVScraper anzeigen"
+
+msgid "Border in Pixel"
+msgstr "Rahmen in Pixel"
+
+msgid "Display previous and next Channel Group"
+msgstr "Vorherige und nächste Kanalgruppe anzeigen"
msgid "Adjust Font Size - EPG Text"
msgstr "Schriftgröße anpassen - EPG Text"
@@ -353,6 +575,15 @@ msgstr "Schriftgröße anpassen - EPG Text"
msgid "Adjust Font Size - EPG Infotext"
msgstr "Schriftgröße anpassen - EPG Infotext"
+msgid "Adjust Font Size - Channel Source Info"
+msgstr "Schriftgröße anpassen - Kanalquelleninfo"
+
+msgid "Adjust Font Size - Channel Group"
+msgstr "Schriftgräße Anpassen - Kanalgruppen"
+
+msgid "Adjust Font Size - Next/Prev Channel Group"
+msgstr "Schriftgräße Anpassen - vorh./nächste Kanalgruppe"
+
msgid "Height of Replay Display (Percent of OSD Height)"
msgstr "Höhe der Wiedergabe Anzeige (% der OSD Höhe)"
@@ -368,12 +599,12 @@ msgstr "Höhe der Track Elemente (in Pixel)"
msgid "Position (0: bot. center, 1: bot. left, ... , 7: bot. right)"
msgstr "Position (0: unten mitte, 1: unten links, ... , 7: unten rechts)"
-msgid "Border Top / Bottom"
-msgstr "Rand oben und unten"
-
msgid "Border Left / Right"
msgstr "Rand links und rechts"
+msgid "Border Top / Bottom"
+msgstr "Rand oben und unten"
+
msgid "Adjust Font Size - Buttons"
msgstr "Schriftgröße anpassen - Buttons"
@@ -395,8 +626,71 @@ msgstr "Breite der Lautstärken Anzeige (% der OSD Breite)"
msgid "Height of Volume Display (Percent of OSD Height)"
msgstr "Höhe der Lautstärken Anzeige (% der OSD Höhe)"
+msgid "Limit Logo Cache"
+msgstr "Logo Cache beschränken"
+
+msgid "Maximal number of logos to cache"
+msgstr "Maximale Anzahl Logos"
+
+msgid "Number of logos to cache at start"
+msgstr "Anzahl der zu cachenden Logos beim Start"
+
+msgid "Cache Sizes"
+msgstr "Cache Größe"
+
+msgid "Menu Icon cache"
+msgstr "Menü Icon Cache"
+
+msgid "Skin Icon image cache"
+msgstr "Skin Icon Cache"
+
+msgid "Logo cache"
+msgstr "Logo Cache"
+
+msgid "Menu Item Logo cache"
+msgstr "Menüelement Logo Cache"
+
+msgid "Timer Logo cache"
+msgstr "Timer Logo Cache"
+
+msgid "Background Images cache"
+msgstr "Hintergrundbilder Cache"
+
msgid "conflict"
msgstr "Konflikt"
msgid "conflicts"
msgstr "Konflikte"
+
+#~ msgid "Display additional EPG Pictures in detailed recording View"
+#~ msgstr "Weitere EPG Bilder in der detaillierten Aufnahmeansicht anzeigen"
+
+#~ msgid "Number of EPG pictures to display"
+#~ msgstr "Anzahl der zusätzlichen EPG Bilder"
+
+#~ msgid "Border around detailed EPG view"
+#~ msgstr "Rahmen um detailierte EPG Ansicht"
+
+#~ msgid "Display Reruns in detailed EPG View"
+#~ msgstr "Wiederholungen in der detailierten EPG Ansicht anzeigen"
+
+#~ msgid "Display additional EPG Pictures in detailed EPG View"
+#~ msgstr "Weitere EPG Bilder in der detaillierten EPG Ansicht anzeigen"
+
+#~ msgid "Detail EPG View EPG Image Width"
+#~ msgstr "Breite der EPG Bilder in der EPG Detailanzeige"
+
+#~ msgid "Detail EPG View EPG Image Height"
+#~ msgstr "Höhe der EPG Bilder in der EPG Detailanzeige"
+
+#~ msgid "Detail EPG View additional EPG Image Width"
+#~ msgstr "Breite der zusätzlichen EPG Bilder"
+
+#~ msgid "Detail EPG View additional EPG Image Height"
+#~ msgstr "Höhe der zusätzlichen EPG Bilder"
+
+#~ msgid "RERUNS OF THIS SHOW"
+#~ msgstr "Wiederholungen dieser Sendung"
+
+#~ msgid "Actors"
+#~ msgstr "Schauspieler"
diff --git a/po/it_IT.po b/po/it_IT.po
index 6d356fb..54ec2ac 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: skinnopacity 0.0.1\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-03-24 11:09+0100\n"
+"POT-Creation-Date: 2014-05-24 15:11+0200\n"
"PO-Revision-Date: 2013-03-19 22:56+0100\n"
"Last-Translator: Diego Pierotto <vdr-italian at tiscali.it>\n"
"Language-Team: \n"
@@ -20,14 +20,125 @@ msgstr ""
"X-Poedit-Country: ITALY\n"
"X-Poedit-SourceCharset: utf-8\n"
+msgid "No Cast available"
+msgstr ""
+
+msgid "Cast"
+msgstr ""
+
+msgid "EPG Info"
+msgstr ""
+
+msgid "Reruns"
+msgstr ""
+
+msgid "Recording Information"
+msgstr ""
+
+msgid "Image Galery"
+msgstr ""
+
+msgid "TheTVDB Info"
+msgstr ""
+
+msgid "TheTVDB Information"
+msgstr ""
+
+msgid "Episode"
+msgstr ""
+
+msgid "Season"
+msgstr ""
+
+msgid "Episode Overview"
+msgstr ""
+
+msgid "First aired"
+msgstr ""
+
+msgid "Guest Stars"
+msgstr ""
+
+msgid "TheMovieDB Rating"
+msgstr ""
+
+msgid "Series Overview"
+msgstr ""
+
+msgid "Genre"
+msgstr ""
+
+msgid "Network"
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
+msgid "TheMovieDB Information"
+msgstr ""
+
+msgid "Original Title"
+msgstr ""
+
+msgid "Tagline"
+msgstr ""
+
+msgid "Overview"
+msgstr ""
+
+msgid "yes"
+msgstr ""
+
+msgid "no"
+msgstr ""
+
+msgid "Adult"
+msgstr ""
+
+msgid "Collection"
+msgstr ""
+
+msgid "Budget"
+msgstr ""
+
+msgid "Revenue"
+msgstr ""
+
+msgid "Homepage"
+msgstr ""
+
+msgid "Release Date"
+msgstr ""
+
+msgid "Runtime"
+msgstr ""
+
+msgid "minutes"
+msgstr ""
+
+msgid "TheMovieDB Popularity"
+msgstr ""
+
+msgid "TheMovieDB Vote Average"
+msgstr ""
+
msgid "free"
msgstr "disponibili"
msgid "Volume"
msgstr "Volume"
-msgid "RERUNS OF THIS SHOW"
-msgstr "REPLICHE DI QUESTO SPETTACOLO"
+msgid "images"
+msgstr ""
+
+msgid "min"
+msgstr "min"
+
+msgid "Reruns of "
+msgstr ""
+
+msgid "No reruns found"
+msgstr ""
msgid "Size"
msgstr "Dimensione"
@@ -44,15 +155,18 @@ msgstr "Formato"
msgid "Est. bitrate"
msgstr "Bitrate estimato"
+msgid "Search timer"
+msgstr ""
+
msgid "Transp."
msgstr "Transponder"
+msgid "No EPG Information found"
+msgstr ""
+
msgid "Duration"
msgstr "Durata"
-msgid "min"
-msgstr "min"
-
msgid "recording"
msgstr "registrazione"
@@ -83,6 +197,9 @@ msgstr "Menu VDR: Menu timer"
msgid "VDR Menu: Recordings Menu"
msgstr "Menu VDR: Menu registrazioni"
+msgid "VDR Menu: Detailed EPG & Recordings View"
+msgstr ""
+
msgid "Channel Switching"
msgstr "Cambio canale"
@@ -95,12 +212,21 @@ msgstr "Tracce audio"
msgid "Messages"
msgstr "Messaggi"
+msgid "Image Caching"
+msgstr ""
+
msgid "right"
msgstr "destra"
msgid "left"
msgstr "sinistra"
+msgid "Carriage Return"
+msgstr ""
+
+msgid "Forward and Back again"
+msgstr ""
+
msgid "off"
msgstr "disattivo"
@@ -113,6 +239,12 @@ msgstr "medio"
msgid "fast"
msgstr "veloce"
+msgid "auto"
+msgstr ""
+
+msgid "Create Log Messages for image loading"
+msgstr ""
+
msgid "Number of Default Menu Entries per Page"
msgstr "Numero di voci per pagina menu predefinito"
@@ -128,9 +260,6 @@ msgstr "Scala dimensione video nel menu finestra"
msgid "Header Height (Percent of OSD Height)"
msgstr "Altezza intestazione (% altezza OSD)"
-msgid "Header Icon Size (Square Header Menu Icons)"
-msgstr "Dim. icona intestazione (icone menu intestazione quadrato)"
-
msgid "Footer Height (Percent of OSD Height)"
msgstr "Altezza piè pagina (% altezza OSD)"
@@ -140,9 +269,15 @@ msgstr "Angoli smussati per voci menu e tasti"
msgid "Radius of rounded corners"
msgstr "Raggio angoli smussati"
+msgid "Use Channel Logo background"
+msgstr ""
+
msgid "Fade-In Time in ms (Zero for switching off fading)"
msgstr "Tempo comparsa in ms (0 per disattivazione)"
+msgid "Menu Items Scroll Style"
+msgstr ""
+
msgid "Menu Items Scrolling Speed"
msgstr "Velocità scorrimento voci menu"
@@ -164,6 +299,9 @@ msgstr "Adatta dim. caratteri - Messaggi"
msgid "Adjust Font Size - Detail View Text"
msgstr "Adatta dim. caratteri - Testo vista dettagli"
+msgid "Adjust Font Size - Detail View Text Small"
+msgstr ""
+
msgid "Adjust Font Size - Detail View Header"
msgstr "Adatta dim. caratteri - Intestazione vista dettagli"
@@ -179,6 +317,15 @@ msgstr ""
msgid "no title"
msgstr ""
+msgid "free time in hours"
+msgstr ""
+
+msgid "free space in GB"
+msgstr ""
+
+msgid "small without logo"
+msgstr ""
+
msgid "Use narrow main menu"
msgstr "Usa menu principale ridotto"
@@ -188,12 +335,12 @@ msgstr "Larghezza (% larghezza OSD)"
msgid "Use narrow setup menu"
msgstr "Usa menu opzioni ridotto"
+msgid "Number of entires per page"
+msgstr ""
+
msgid "Use menu icons"
msgstr "Usa icone menu"
-msgid "Icon Size (Square)"
-msgstr "Dim. icona (quadrato)"
-
msgid "Main menu title style"
msgstr ""
@@ -203,6 +350,9 @@ msgstr "Mostra utilizzo disco"
msgid "Size (square, Percent of OSD Width)"
msgstr "Dimensione (quadrato, % larghezza OSD)"
+msgid "Free Disc Display"
+msgstr ""
+
msgid "Adjust Font Size - free"
msgstr "Adatta dim. caratteri - Disponibili"
@@ -218,11 +368,8 @@ msgstr ""
msgid "Width of Timers (Percent of OSD Width)"
msgstr "Larghezza di Timer (% larghezza OSD)"
-msgid "Channel Logo Width"
-msgstr "Larghezza logo canale"
-
-msgid "Channel Logo Height"
-msgstr "Altezza logo canale"
+msgid "Width of Channel Logos (Percent of Timer Width)"
+msgstr ""
msgid "Adjust Font Size - Title"
msgstr "Adatta dim. caratteri - Titolo"
@@ -239,18 +386,18 @@ msgstr "Altezza logo intestazione"
msgid "Adjust Font Size - Menu Items"
msgstr "Adatta dim. caratteri - Voci menu"
-msgid "never"
-msgstr "mai"
-
-msgid "if exists"
-msgstr "se esiste"
+msgid "window"
+msgstr ""
-msgid "always"
-msgstr "sempre"
+msgid "full screen"
+msgstr ""
msgid "Use narrow menu"
msgstr "Usa menu ridotto"
+msgid "Mode of EPG Window"
+msgstr ""
+
msgid "EPG Window Fade-In Time in ms (Zero for switching off fading)"
msgstr "Tempo comparsa finestra EPG in ms (0 per disattivazione)"
@@ -266,57 +413,111 @@ msgstr "Velocità scorrimento testo finestra EPG"
msgid "Height of EPG Info Window (Percent of OSD Height)"
msgstr "Altezza di Finestra info EPG (% altezza OSD)"
-msgid "Display Reruns in detailed EPG View"
-msgstr "Mostra repliche in vista dettagli EPG"
+msgid "Adjust Font Size - Menu Item"
+msgstr "Adatta dim. caratteri - Voce menu"
+
+msgid "Adjust Font Size - Menu Item Small"
+msgstr "Adatta dim. caratteri - Voce menu piccolo"
-msgid "Number of reruns to display"
-msgstr "Numero di repliche da mostrare"
+msgid "Adjust Font Size - EPG Info Window"
+msgstr "Adatta dim. caratteri - Finestra info EPG"
-msgid "Use Subtitle for reruns"
-msgstr "Usa sottotitoli per repliche"
+msgid "Adjust Font Size - EPG Info Window Header"
+msgstr ""
+
+msgid "Transponder Information"
+msgstr ""
-msgid "Display additional EPG Pictures in detailed EPG View"
-msgstr "Mostra immagini EPG aggiuntivo in vista dettagli EPG"
+msgid "Current Schedule"
+msgstr ""
-msgid "Number of EPG pictures to display"
-msgstr "Numero di immagini EPG da mostrare"
+msgid "Plain Channels"
+msgstr ""
-msgid "Detail EPG View Logo Width"
-msgstr "Larghezza logo vista dettagli EPG"
+msgid "Menu Items display mode"
+msgstr ""
-msgid "Detail EPG View Logo Height"
-msgstr "Altezza logo vista dettagli EPG"
+msgid "Display schedules with time info"
+msgstr ""
-msgid "Detail EPG View EPG Image Width"
-msgstr "Larghezza immagine vista dettagli EPG"
+msgid "Number of EPG Entries in Schedules Info Window"
+msgstr ""
-msgid "Detail EPG View EPG Image Height"
-msgstr "Altezza immagine vista dettagli EPG"
+msgid "never"
+msgstr "mai"
-msgid "Detail EPG View additional EPG Image Width"
-msgstr "Larghezza immagine EPG aggiuntivo vista dettagli EPG"
+msgid "always"
+msgstr "sempre"
-msgid "Detail EPG View additional EPG Image Height"
-msgstr "Altezza immagine EPG aggiuntivo vista dettagli EPG"
+msgid "only if no tvscraper media available"
+msgstr ""
-msgid "Adjust Font Size - Menu Item"
-msgstr "Adatta dim. caratteri - Voce menu"
+msgid "Mode of recording Window"
+msgstr ""
-msgid "Adjust Font Size - Menu Item Small"
-msgstr "Adatta dim. caratteri - Voce menu piccolo"
+msgid "Border around detailed recording view"
+msgstr ""
-msgid "Adjust Font Size - EPG Info Window"
-msgstr "Adatta dim. caratteri - Finestra info EPG"
+msgid "Use folder poster if available"
+msgstr ""
-msgid "Display additional EPG Pictures in detailed recording View"
-msgstr "Mostra immagini EPG aggiuntivo nella vista dettagli registrazione"
+msgid "Width of manually set recording poster"
+msgstr ""
+
+msgid "Height of manually set recording poster"
+msgstr ""
+
+msgid "if exists"
+msgstr "se esiste"
+
+msgid "Border around view"
+msgstr ""
+
+msgid "Scroll Speed with up / down (number of lines)"
+msgstr ""
+
+msgid "Header Height detailed EPG view (Perc. of OSD Height)"
+msgstr ""
+
+msgid "Header Height detailed recording view (Perc. of OSD Height)"
+msgstr ""
+
+msgid "Number of reruns to display"
+msgstr "Numero di repliche da mostrare"
+
+msgid "Use Subtitle for reruns"
+msgstr "Usa sottotitoli per repliche"
+
+msgid "EPG Image Width"
+msgstr ""
+
+msgid "EPG Image Height"
+msgstr ""
-msgid "Folder Icon Size"
-msgstr "Dim. icona cartella"
+msgid "Large EPG Image Width"
+msgstr ""
+
+msgid "Large EPG Image Height"
+msgstr ""
+
+msgid "transparent channel logo"
+msgstr ""
+
+msgid "full osd width"
+msgstr ""
msgid "do not display"
msgstr "non mostrare"
+msgid "top"
+msgstr ""
+
+msgid "middle"
+msgstr ""
+
+msgid "bottom"
+msgstr ""
+
msgid "show elapsed time"
msgstr ""
@@ -332,11 +533,26 @@ msgstr "Larghezza bordi sinistro e destro"
msgid "Bottom Border Height"
msgstr "Altezza bordo inferiore"
+msgid "Background Transparency in Percent"
+msgstr ""
+
+msgid "Background Style"
+msgstr ""
+
+msgid "Rounded Corners"
+msgstr ""
+
+msgid "Vertical Channel Logo Alignment"
+msgstr ""
+
msgid "Channel Logo Position"
msgstr "Posizione logo canale"
-msgid "Channel Logo Border"
-msgstr "Bordo logo canale"
+msgid "Channel Logo original Width"
+msgstr ""
+
+msgid "Channel Logo original Height"
+msgstr ""
msgid "Kind of time display for current schedule"
msgstr ""
@@ -344,11 +560,17 @@ msgstr ""
msgid "Display Signal Strength & Quality"
msgstr "Mostra qualità e intensità segnale"
-msgid "Screen Resolution Icon Size"
-msgstr "Dim. icona risoluzione schermo"
+msgid "Display Channel Source & Rec. Info"
+msgstr ""
+
+msgid "Display Poster or Fanart from TVScraper"
+msgstr ""
+
+msgid "Border in Pixel"
+msgstr ""
-msgid "Status Icons Size"
-msgstr "Dim. icone stato"
+msgid "Display previous and next Channel Group"
+msgstr ""
msgid "Adjust Font Size - EPG Text"
msgstr "Adatta dim. caratteri - Testo EPG"
@@ -356,6 +578,15 @@ msgstr "Adatta dim. caratteri - Testo EPG"
msgid "Adjust Font Size - EPG Infotext"
msgstr "Adatta dim. caratteri - Info testo EPG"
+msgid "Adjust Font Size - Channel Source Info"
+msgstr ""
+
+msgid "Adjust Font Size - Channel Group"
+msgstr ""
+
+msgid "Adjust Font Size - Next/Prev Channel Group"
+msgstr ""
+
msgid "Height of Replay Display (Percent of OSD Height)"
msgstr "Altezza di Mostra riproduzione (% altezza OSD)"
@@ -371,12 +602,12 @@ msgstr ""
msgid "Position (0: bot. center, 1: bot. left, ... , 7: bot. right)"
msgstr "Posizione (0: basso centrale, 1: basso sin., ... , 7: basso destra)"
-msgid "Border Top / Bottom"
-msgstr "Bordo superiore / inferiore"
-
msgid "Border Left / Right"
msgstr "Bordo sinistro / destro"
+msgid "Border Top / Bottom"
+msgstr "Bordo superiore / inferiore"
+
msgid "Adjust Font Size - Buttons"
msgstr "Adatta dim. caratteri - Tasti"
@@ -398,8 +629,65 @@ msgstr "Larghezza di Mostra volume (% altezza OSD)"
msgid "Height of Volume Display (Percent of OSD Height)"
msgstr "Altezza di Mostra volume (% altezza OSD)"
+msgid "Limit Logo Cache"
+msgstr ""
+
+msgid "Maximal number of logos to cache"
+msgstr ""
+
+msgid "Number of logos to cache at start"
+msgstr ""
+
+msgid "Cache Sizes"
+msgstr ""
+
+msgid "Menu Icon cache"
+msgstr ""
+
+msgid "Skin Icon image cache"
+msgstr ""
+
+msgid "Logo cache"
+msgstr ""
+
+msgid "Menu Item Logo cache"
+msgstr ""
+
+msgid "Timer Logo cache"
+msgstr ""
+
+msgid "Background Images cache"
+msgstr ""
+
msgid "conflict"
msgstr "conflitto"
msgid "conflicts"
msgstr "conflitti"
+
+#~ msgid "Display additional EPG Pictures in detailed recording View"
+#~ msgstr "Mostra immagini EPG aggiuntivo nella vista dettagli registrazione"
+
+#~ msgid "Number of EPG pictures to display"
+#~ msgstr "Numero di immagini EPG da mostrare"
+
+#~ msgid "Display Reruns in detailed EPG View"
+#~ msgstr "Mostra repliche in vista dettagli EPG"
+
+#~ msgid "Display additional EPG Pictures in detailed EPG View"
+#~ msgstr "Mostra immagini EPG aggiuntivo in vista dettagli EPG"
+
+#~ msgid "Detail EPG View EPG Image Width"
+#~ msgstr "Larghezza immagine vista dettagli EPG"
+
+#~ msgid "Detail EPG View EPG Image Height"
+#~ msgstr "Altezza immagine vista dettagli EPG"
+
+#~ msgid "Detail EPG View additional EPG Image Width"
+#~ msgstr "Larghezza immagine EPG aggiuntivo vista dettagli EPG"
+
+#~ msgid "Detail EPG View additional EPG Image Height"
+#~ msgstr "Altezza immagine EPG aggiuntivo vista dettagli EPG"
+
+#~ msgid "RERUNS OF THIS SHOW"
+#~ msgstr "REPLICHE DI QUESTO SPETTACOLO"
diff --git a/po/sk_SK.po b/po/sk_SK.po
index dceb7e4..0c77330 100644
--- a/po/sk_SK.po
+++ b/po/sk_SK.po
@@ -6,19 +6,118 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: vdr-skinnopacity 0.0.6\n"
+"Project-Id-Version: vdr-skinnopacity\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-03-24 11:09+0100\n"
-"PO-Revision-Date: 2013-03-12 15:59+0100\n"
+"POT-Creation-Date: 2014-05-24 15:11+0200\n"
+"PO-Revision-Date: 2013-11-11 20:52+0100\n"
"Last-Translator: Milan Hrala <hrala.milan at gmail.com>\n"
"Language-Team: \n"
"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Slovak\n"
-"X-Poedit-Country: SLOVAKIA\n"
-"X-Poedit-SourceCharset: iso-8859-2\n"
+
+msgid "No Cast available"
+msgstr ""
+
+msgid "Cast"
+msgstr ""
+
+msgid "EPG Info"
+msgstr ""
+
+msgid "Reruns"
+msgstr ""
+
+msgid "Recording Information"
+msgstr ""
+
+msgid "Image Galery"
+msgstr ""
+
+msgid "TheTVDB Info"
+msgstr ""
+
+msgid "TheTVDB Information"
+msgstr ""
+
+msgid "Episode"
+msgstr ""
+
+msgid "Season"
+msgstr ""
+
+msgid "Episode Overview"
+msgstr ""
+
+msgid "First aired"
+msgstr ""
+
+msgid "Guest Stars"
+msgstr ""
+
+msgid "TheMovieDB Rating"
+msgstr ""
+
+msgid "Series Overview"
+msgstr ""
+
+msgid "Genre"
+msgstr ""
+
+msgid "Network"
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
+msgid "TheMovieDB Information"
+msgstr ""
+
+msgid "Original Title"
+msgstr ""
+
+msgid "Tagline"
+msgstr ""
+
+msgid "Overview"
+msgstr ""
+
+msgid "yes"
+msgstr "�no"
+
+msgid "no"
+msgstr "nie"
+
+msgid "Adult"
+msgstr ""
+
+msgid "Collection"
+msgstr ""
+
+msgid "Budget"
+msgstr ""
+
+msgid "Revenue"
+msgstr ""
+
+msgid "Homepage"
+msgstr ""
+
+msgid "Release Date"
+msgstr ""
+
+msgid "Runtime"
+msgstr ""
+
+msgid "minutes"
+msgstr ""
+
+msgid "TheMovieDB Popularity"
+msgstr ""
+
+msgid "TheMovieDB Vote Average"
+msgstr ""
msgid "free"
msgstr "vo�n�"
@@ -26,14 +125,23 @@ msgstr "vo
msgid "Volume"
msgstr "Hlasitos�"
-msgid "RERUNS OF THIS SHOW"
-msgstr "Repr�za"
+msgid "images"
+msgstr "obr�zkov"
+
+msgid "min"
+msgstr "min"
+
+msgid "Reruns of "
+msgstr ""
+
+msgid "No reruns found"
+msgstr ""
msgid "Size"
msgstr "Ve�kos�"
msgid "cut"
-msgstr "vystrihn��"
+msgstr "zostrihan�"
msgid "Length"
msgstr "D�ka"
@@ -44,20 +152,23 @@ msgstr "Form
msgid "Est. bitrate"
msgstr "Odhadovan� prenosov� r�chlos�"
+msgid "Search timer"
+msgstr "Vyh�ada� pl�n"
+
msgid "Transp."
msgstr "Transp."
+msgid "No EPG Information found"
+msgstr "Nena�li sa EPG inform�cie"
+
msgid "Duration"
msgstr "D�ka"
-msgid "min"
-msgstr "min"
-
msgid "recording"
msgstr "nahrat�"
msgid "recordings"
-msgstr "Nahr�vky"
+msgstr "nahr�vky"
msgid "new"
msgstr "nov�"
@@ -69,25 +180,28 @@ msgid "VDR Menu: Common Settings"
msgstr "VDR ponuka: V�eobecn� nastavenia"
msgid "VDR Menu: Main and Setup Menu"
-msgstr "VDR ponuka: hlavn� ponuka a ponuka nastavenia"
+msgstr "VDR ponuka: hlavn� ponuka a ponuka Nastavenie"
msgid "VDR Menu: Schedules Menu"
-msgstr "VDR ponuka: ponuka tv program"
+msgstr "VDR ponuka: TV program"
msgid "VDR Menu: Channels Menu"
-msgstr "VDR ponuka: ponuka kan�lov"
+msgstr "VDR ponuka: Kan�ly"
msgid "VDR Menu: Timers Menu"
-msgstr "VDR ponuka: ponuka pl�nov nahr�vania"
+msgstr "VDR ponuka: Pl�ny nahr�vania"
msgid "VDR Menu: Recordings Menu"
-msgstr "VDR ponuka: ponuka nahr�viek"
+msgstr "VDR ponuka: Nahr�vky"
+
+msgid "VDR Menu: Detailed EPG & Recordings View"
+msgstr ""
msgid "Channel Switching"
-msgstr "Prepn�� kan�l"
+msgstr "Prep�nanie kan�lu"
msgid "Replay"
-msgstr "Pehr�vanie nahr�vok"
+msgstr "Prehr�vanie nahr�vok"
msgid "Audio Tracks"
msgstr "Zvukov� stopa"
@@ -95,12 +209,21 @@ msgstr "Zvukov
msgid "Messages"
msgstr "Spr�vy"
+msgid "Image Caching"
+msgstr "Vyrovn�vacia pam� obr�zkov"
+
msgid "right"
msgstr "vpravo"
msgid "left"
msgstr "v�avo"
+msgid "Carriage Return"
+msgstr "vpred a znova od za�iatku"
+
+msgid "Forward and Back again"
+msgstr "vpred a zase sp�"
+
msgid "off"
msgstr "vypnut�"
@@ -113,6 +236,12 @@ msgstr "stredne"
msgid "fast"
msgstr "r�chlo"
+msgid "auto"
+msgstr "automaticky"
+
+msgid "Create Log Messages for image loading"
+msgstr "Vytvori� protokolovanie spr�v pre na��tanie obr�zka"
+
msgid "Number of Default Menu Entries per Page"
msgstr "Po�et polo�iek z�kladn�ho menu na str�nke"
@@ -128,9 +257,6 @@ msgstr "Zmeni
msgid "Header Height (Percent of OSD Height)"
msgstr "V��ka hlavi�ky (percento z �asti OSD v��ky)"
-msgid "Header Icon Size (Square Header Menu Icons)"
-msgstr "Ve�kos� ikony hlavi�ky (ikona hlavi�ky do �tvorca)"
-
msgid "Footer Height (Percent of OSD Height)"
msgstr "V��ka z�p�tia (percento z �asti OSD v��ky)"
@@ -140,9 +266,15 @@ msgstr "Zaoblen
msgid "Radius of rounded corners"
msgstr "Polomer zaoblenia rohov"
+msgid "Use Channel Logo background"
+msgstr ""
+
msgid "Fade-In Time in ms (Zero for switching off fading)"
msgstr "�as efektu zmiznutia v ms (nula vypn��)"
+msgid "Menu Items Scroll Style"
+msgstr "�t�l rolovania menu polo�iek"
+
msgid "Menu Items Scrolling Speed"
msgstr "R�chlos� rolovania polo�iek menu"
@@ -164,6 +296,9 @@ msgstr "Nastavenie ve
msgid "Adjust Font Size - Detail View Text"
msgstr "Nastavenie ve�kosti p�sma - Podrobn� zobrazenie textu"
+msgid "Adjust Font Size - Detail View Text Small"
+msgstr "Prisp�sobenie ve�kosti p�sma - Podrobn� zobrazenie mal�ho textu"
+
msgid "Adjust Font Size - Detail View Header"
msgstr "Nastavenie ve�kosti p�sma - Podrobn� zobrazenie hlavi�ky"
@@ -171,13 +306,22 @@ msgid "Adjust Font Size - Detail View Header Large"
msgstr "Nastavenie ve�kosti p�sma - Podrobn� zobrazenie ve�kej hlavi�ky"
msgid "\"VDR\" plus VDR version"
-msgstr ""
+msgstr "\"VDR\" plus VDR verzia"
msgid "only VDR version"
-msgstr ""
+msgstr "iba VDR verzia"
msgid "no title"
-msgstr ""
+msgstr "�iadny n�zov"
+
+msgid "free time in hours"
+msgstr "vo�n� �as v hodin�ch"
+
+msgid "free space in GB"
+msgstr "vo�n� miesto v GB"
+
+msgid "small without logo"
+msgstr "mal� bez loga"
msgid "Use narrow main menu"
msgstr "�zke hlavn� menu"
@@ -188,14 +332,14 @@ msgstr "
msgid "Use narrow setup menu"
msgstr "�zke menu nastavenia"
+msgid "Number of entires per page"
+msgstr "Po�et polo�iek na stranu"
+
msgid "Use menu icons"
msgstr "Pou�i� ikony ponuky"
-msgid "Icon Size (Square)"
-msgstr "Ve�kos� ikony (do �tvorca)"
-
msgid "Main menu title style"
-msgstr ""
+msgstr "�t�l n�zvu hlavn�ho menu"
msgid "Display Disk Usage"
msgstr "Zobrazi� vyu�itie disku"
@@ -203,29 +347,29 @@ msgstr "Zobrazi
msgid "Size (square, Percent of OSD Width)"
msgstr "Ve�kos� (do �tvorca, percento z OSD ��rky)"
+msgid "Free Disc Display"
+msgstr "Zobrazi� vyu�itie disku"
+
msgid "Adjust Font Size - free"
-msgstr "Nastavenie ve�kos�i p�sma - vo�n�"
+msgstr "Nastavenie ve�kosti p�sma - vo�n�"
msgid "Adjust Font Size - percent"
-msgstr "Nastavenie ve�kos�i p�sma - percento"
+msgstr "Nastavenie ve�kosti p�sma - percento"
msgid "Display Timers"
-msgstr "Zobrazen� pl�ny nahr�vania"
+msgstr "Zobrazi� pl�ny nahr�vania"
msgid "Maximum number of Timers"
-msgstr ""
+msgstr "Maxim�lny po�et zobrazen�ch pl�nov"
msgid "Width of Timers (Percent of OSD Width)"
msgstr "��rka zobrazen�ho pl�nu nahr�vania (Percento s OSD ��rky)"
-msgid "Channel Logo Width"
-msgstr "��rka loga kan�lu"
-
-msgid "Channel Logo Height"
-msgstr "V��ka loga kan�lu"
+msgid "Width of Channel Logos (Percent of Timer Width)"
+msgstr "��rka loga kan�lov (Percento z ��rky pl�nu)"
msgid "Adjust Font Size - Title"
-msgstr "Nastavenie ve�kos�i p�sma - N�zov"
+msgstr "Nastavenie ve�kosti p�sma - N�zov"
msgid "Show Timer Conflicts"
msgstr "Zobrazi� konflikty pl�nu nahr�vania"
@@ -237,20 +381,20 @@ msgid "Header Logo Height"
msgstr "V��ka loga hlavi�ky"
msgid "Adjust Font Size - Menu Items"
-msgstr "Nastavenie ve�kos�i p�sma - Polo�ky menu"
-
-msgid "never"
-msgstr "nikdy"
+msgstr "Nastavenie ve�kosti p�sma - Polo�ky menu"
-msgid "if exists"
-msgstr "ak je k dispoz�cii"
+msgid "window"
+msgstr "v okienku"
-msgid "always"
-msgstr "v�dy"
+msgid "full screen"
+msgstr "na celej obrazovke"
msgid "Use narrow menu"
msgstr "Pou�i� �zku ponuku"
+msgid "Mode of EPG Window"
+msgstr "Sp�sob zobrazenia EPG okna"
+
msgid "EPG Window Fade-In Time in ms (Zero for switching off fading)"
msgstr "�as efektu zmiznutia EPG okna v ms (nula vypne efekt)"
@@ -266,117 +410,201 @@ msgstr "R
msgid "Height of EPG Info Window (Percent of OSD Height)"
msgstr "V��ka informa�n�ho EPG okna (Percent z OSD v��ky)"
-msgid "Display Reruns in detailed EPG View"
-msgstr "Zobrazi� repr�zy v podrobnostiach EPG"
+msgid "Adjust Font Size - Menu Item"
+msgstr "Nastavenie ve�kosti p�sma - polo�ky ponuky"
-msgid "Number of reruns to display"
-msgstr "Po�et repr�z na zobrazenie"
+msgid "Adjust Font Size - Menu Item Small"
+msgstr "Nastavenie ve�kosti p�sma - Mal� polo�ky ponuky"
-msgid "Use Subtitle for reruns"
-msgstr "Pou�i� titulky pre repr�zu"
+msgid "Adjust Font Size - EPG Info Window"
+msgstr "Nastavenie ve�kosti p�sma - EPG informa�n� okno"
-msgid "Display additional EPG Pictures in detailed EPG View"
-msgstr "Zobrazi� viac obr�zkov v podrobnostiach EPG"
+msgid "Adjust Font Size - EPG Info Window Header"
+msgstr "Nastavenie ve�kosti p�sma - Hlavi�ka EPG info okna"
-msgid "Number of EPG pictures to display"
-msgstr "Po�et EPG obr�zkov na obazovke"
+msgid "Transponder Information"
+msgstr "s inform�ciami o transport�ri"
-msgid "Detail EPG View Logo Width"
-msgstr "��rka loga v podrobnom zobrazen� EPG"
+msgid "Current Schedule"
+msgstr "s aktu�lnou rel�ciou"
-msgid "Detail EPG View Logo Height"
-msgstr "V��ka loga v podrobnom zobrazen� EPG"
+msgid "Plain Channels"
+msgstr "iba kan�ly"
-msgid "Detail EPG View EPG Image Width"
-msgstr "��rka obr�zku v podrobnom zobrazen� EPG"
+msgid "Menu Items display mode"
+msgstr "Re�im zobrazenia menu polo�iek"
-msgid "Detail EPG View EPG Image Height"
-msgstr "V��ka obr�zku v podrobnom zobrazen� EPG"
+msgid "Display schedules with time info"
+msgstr "Zobrazi� rel�ciu s �asom vysielania"
-msgid "Detail EPG View additional EPG Image Width"
-msgstr "��rka �al�ieho obr�zku v podrobnom zobrazen� EPG"
+msgid "Number of EPG Entries in Schedules Info Window"
+msgstr "Po�et EPG polo�iek v okne TV programu"
-msgid "Detail EPG View additional EPG Image Height"
-msgstr "V��ka �al�ieho obr�zku v podrobnom zobrazen� EPG"
+msgid "never"
+msgstr "nikdy"
-msgid "Adjust Font Size - Menu Item"
-msgstr "Nastavenie ve�kos�i p�sma - polo�ky ponuky"
+msgid "always"
+msgstr "v�dy"
-msgid "Adjust Font Size - Menu Item Small"
-msgstr "Nastavenie ve�kos�i p�sma - Mal� polo�ky ponuky"
+msgid "only if no tvscraper media available"
+msgstr "iba ak je tvscraper dostupn�"
-msgid "Adjust Font Size - EPG Info Window"
-msgstr "Nastavenie ve�kos�i p�sma - EPG informa�n� okno"
+msgid "Mode of recording Window"
+msgstr "Sp�sob zobrazenia okna nahr�vok"
+
+msgid "Border around detailed recording view"
+msgstr "Okraj okolo podrobn�ho zobrazenia nahr�vky"
+
+msgid "Use folder poster if available"
+msgstr "Pou�i� zlo�ku plag�t ak je k dispoz�cii"
+
+msgid "Width of manually set recording poster"
+msgstr "Ru�ne nastavi� ��rku plag�tov nahr�vok"
+
+msgid "Height of manually set recording poster"
+msgstr "Ru�ne nastavi� v��ku plag�tov nahr�vok"
+
+msgid "if exists"
+msgstr "ak je k dispoz�cii"
+
+msgid "Border around view"
+msgstr ""
-msgid "Display additional EPG Pictures in detailed recording View"
-msgstr "Zobrazi� �al�ie EPG obr�zky v podrobnom zobrazen� nahr�vky"
+msgid "Scroll Speed with up / down (number of lines)"
+msgstr ""
+
+msgid "Header Height detailed EPG view (Perc. of OSD Height)"
+msgstr ""
+
+msgid "Header Height detailed recording view (Perc. of OSD Height)"
+msgstr ""
+
+msgid "Number of reruns to display"
+msgstr "Po�et repr�z na zobrazenie"
+
+msgid "Use Subtitle for reruns"
+msgstr "Pou�i� titulky pre repr�zu"
-msgid "Folder Icon Size"
-msgstr "Ve�kos� ikony prie�inku"
+msgid "EPG Image Width"
+msgstr ""
+
+msgid "EPG Image Height"
+msgstr ""
+
+msgid "Large EPG Image Width"
+msgstr ""
+
+msgid "Large EPG Image Height"
+msgstr ""
+
+msgid "transparent channel logo"
+msgstr "priesvitn� logo kan�lu"
+
+msgid "full osd width"
+msgstr "cel� OSD ��rka"
msgid "do not display"
msgstr "nezobrazova�"
-msgid "show elapsed time"
+msgid "top"
msgstr ""
-msgid "show remaining time"
+msgid "middle"
msgstr ""
-msgid "Height of Channel Display (Percent of OSD Height)"
+msgid "bottom"
msgstr ""
+msgid "show elapsed time"
+msgstr "zobrazi� uplynul� �as"
+
+msgid "show remaining time"
+msgstr "zobrazi� zost�vaj�ci �as"
+
+msgid "Height of Channel Display (Percent of OSD Height)"
+msgstr "V��ka zobrazen�ho kan�lu"
+
msgid "Left & Right Border Width"
msgstr "��rka �av�ho a prav�ho okraja"
msgid "Bottom Border Height"
msgstr "V��ka spodn�ho okraja"
+msgid "Background Transparency in Percent"
+msgstr "Prieh�adnos� pozadia v percent�ch"
+
+msgid "Background Style"
+msgstr "�t�l pozadia"
+
+msgid "Rounded Corners"
+msgstr "Zaoblen� rohy"
+
+msgid "Vertical Channel Logo Alignment"
+msgstr ""
+
msgid "Channel Logo Position"
msgstr "Poz�cia loga kan�lu"
-msgid "Channel Logo Border"
-msgstr "Okraj loga kan�lu"
+msgid "Channel Logo original Width"
+msgstr "P�vodn� ��rka loga kan�la"
+
+msgid "Channel Logo original Height"
+msgstr "P�vodn� v��ka loga kan�la"
msgid "Kind of time display for current schedule"
-msgstr ""
+msgstr "Druh zobrazenia �asu pre aktu�lnu rel�ciu"
msgid "Display Signal Strength & Quality"
msgstr "Zobrazi� silu a kvalitu sign�lu"
-msgid "Screen Resolution Icon Size"
-msgstr "Ve�kos� ikony rozl�enia obrazovky"
+msgid "Display Channel Source & Rec. Info"
+msgstr ""
+
+msgid "Display Poster or Fanart from TVScraper"
+msgstr "Zobrazenie plag�tu alebo Fanartu z TVScraper"
-msgid "Status Icons Size"
-msgstr "Ve�kos� ik�n panelu �loh"
+msgid "Border in Pixel"
+msgstr "Okraj v pixeloch"
+
+msgid "Display previous and next Channel Group"
+msgstr "Zobrazi� predch�dzaj�cu a nasleduj�cu skupinu kan�lu"
msgid "Adjust Font Size - EPG Text"
-msgstr "Nastavenie ve�kos�i p�sma - EPG text"
+msgstr "Nastavenie ve�kosti p�sma - EPG text"
msgid "Adjust Font Size - EPG Infotext"
-msgstr "Nastavenie ve�kos�i p�sma - EPG informa�n� text"
+msgstr "Nastavenie ve�kosti p�sma - EPG informa�n� text"
+
+msgid "Adjust Font Size - Channel Source Info"
+msgstr "Nastavenie ve�kosti p�sma - Info zdroja kan�la"
+
+msgid "Adjust Font Size - Channel Group"
+msgstr "Nastavenie ve�kosti p�sma - Skupina kan�lu"
+
+msgid "Adjust Font Size - Next/Prev Channel Group"
+msgstr "Nastavenie ve�kosti p�sma - Predch�dzaj�ca/nasleduj�ca skupina kan�lu"
msgid "Height of Replay Display (Percent of OSD Height)"
-msgstr ""
+msgstr "V��ka zobrazenia prehr�vania (Percento s OSD v��ky)"
msgid "Adjust Font Size - Text"
-msgstr "Nastavenie ve�kos�i p�sma - textu"
+msgstr "Nastavenie ve�kosti p�sma - textu"
msgid "Width of Tracks Display (Percent of OSD Width)"
msgstr "��rka zobrazenia v�beru stopy (Percent z OSD ��rky)"
msgid "Height of Track Items (in pixels)"
-msgstr ""
+msgstr "V��ka polo�iek zvukov�ch st�p (v pixeloch)"
msgid "Position (0: bot. center, 1: bot. left, ... , 7: bot. right)"
msgstr "Poz�cia (0: dole uprostred, 1: v�avo dole, ... , 7: vpravo dole)"
-msgid "Border Top / Bottom"
-msgstr "okraje navrchu / na spodku"
-
msgid "Border Left / Right"
msgstr "Okraje v�avo / vpravo"
+msgid "Border Top / Bottom"
+msgstr "okraje navrchu / na spodku"
+
msgid "Adjust Font Size - Buttons"
msgstr "Nastavenie ve�kosti p�sma - Tla��tka"
@@ -384,7 +612,7 @@ msgid "Width of Message Display (Percent of OSD Height)"
msgstr "��rka zobrazenej spr�vy (percento z �asti OSD)"
msgid "Height of Message Display (Percent of OSD Height)"
-msgstr ""
+msgstr "V��ka zobrazenej spr�vy (Percento s OSD v��ky)"
msgid "Adjust Font Size"
msgstr "Nastavenie ve�kosti p�sma"
@@ -396,136 +624,76 @@ msgid "Width of Volume Display (Percent of OSD Height)"
msgstr "��rka zobrazenia hlasitosti (Percent z OSD ��rky)"
msgid "Height of Volume Display (Percent of OSD Height)"
-msgstr ""
+msgstr "V��ka zobrazenia hlasitosti (Percento z OSD v��ky)"
-msgid "conflict"
-msgstr "konflikt"
+msgid "Limit Logo Cache"
+msgstr "Limit vyrovn�vacej pam�te loga"
-msgid "conflicts"
-msgstr "konflikty"
-
-#~ msgid "Hight of Channel Display (Percent of OSD Height)"
-#~ msgstr "V��ka zobrazenia (Percento z OSD v��ky)"
-
-#~ msgid "Hight of Replay Display (Percent of OSD Height)"
-#~ msgstr "V��ka zobrazenia prehr�vania (Percent z OSD v��ky)"
-
-#~ msgid "Hight of Message Display (Percent of OSD Height)"
-#~ msgstr "V��ka zobrazenej spr�vy (percento z �asti OSD v��ky)"
-
-#~ msgid "Hight of Volume Display (Percent of OSD Height)"
-#~ msgstr "V��ka zobrazenia hlasitosti (Percent z OSD v��ky)"
-
-#~ msgid "Hight of Tracks Display (Percent of OSD Height)"
-#~ msgstr "V��ka zobrazenia v�beru stopy (Percent z OSD v��ky)"
-
-#~ msgid "VDR Menu: Dimensions Settings"
-#~ msgstr "VDR menu: Nastavenie ve�kosti"
-
-#~ msgid "VDR Menu: Font Sizes"
-#~ msgstr "VDR menu: Ve�kos� p�sma"
-
-#~ msgid "Use narrow schedules menu"
-#~ msgstr "�zke menu tv programu"
-
-#~ msgid "Use narrow channel menu"
-#~ msgstr "�zke menu kak�lov"
-
-#~ msgid "Use narrow timer menu"
-#~ msgstr "�zke menu pl�nov nahr�vania"
-
-#~ msgid "Use narrow recording menu"
-#~ msgstr "�zke menu nahr�viek"
+msgid "Maximal number of logos to cache"
+msgstr "Maxim�lny po�et l�g do pam�te"
-#~ msgid "Display Disk Usage in main menu"
-#~ msgstr "Stav disku v hlavnom menu"
+msgid "Number of logos to cache at start"
+msgstr "Po�et l�g do vyrovn�vacej pam�te pri �tarte"
-#~ msgid "Display Timers in main menu"
-#~ msgstr "Pl�ny nahr�vania v hlavnom menu"
+msgid "Cache Sizes"
+msgstr "Ve�kos� vyrovn�vacej pam�te"
-#~ msgid "Show Timer Conflicts in main menu"
-#~ msgstr "konflikty pl�nov v hlavnom menu"
+msgid "Menu Icon cache"
+msgstr "Vyrovn�vacia pam� ikony menu"
-#~ msgid "Width of Main and Setup Menu (Percent of OSD Width)"
-#~ msgstr "��rka menu, hlavn�ho aj nastavenia (percento z OSD ��rky)"
+msgid "Skin Icon image cache"
+msgstr "Vyrovn�vacia pam� ikon vzh�adu"
-#~ msgid "Width of Schedules Menu (Percent of OSD Width)"
-#~ msgstr "��rka menu tv programu (percento z OSD ��rky)"
+msgid "Logo cache"
+msgstr "Medzipam� loga"
-#~ msgid "Width of Channels Menu (Percent of OSD Width)"
-#~ msgstr "��rka menu kan�lov (percento z OSD ��rky)"
+msgid "Menu Item Logo cache"
+msgstr "Medzipam� loga menu polo�ky"
-#~ msgid "Width of Timers Menu (Percent of OSD Width)"
-#~ msgstr "��rka menu pl�nov nahr�vania (percento z OSD ��rky)"
+msgid "Timer Logo cache"
+msgstr "Medzipam� loga pl�nu nahr�vania"
-#~ msgid "Width of Recordings Menu (Percent of OSD Width)"
-#~ msgstr "��rka menu nahr�viek (percento z OSD ��rky)"
+msgid "Background Images cache"
+msgstr "Medzipam� obr�zkov pozadia"
-#~ msgid "Size of Disc Usage (square, Percent of OSD Width)"
-#~ msgstr "Stav vyu�itia pevn�ho disku (�tvorec, percento z OSD ��rky)"
-
-#~ msgid "Width of Timers Display (Percent of OSD Width)"
-#~ msgstr "��rka zobrazen�ho pl�nu (percento z OSD ��rky)"
-
-#~ msgid "Icon Size (Square Main Menu Icons)"
-#~ msgstr "Gr��e der quadratischen Hauptmen� Icons"
-
-#~ msgid "Channel Logo Width (on the Menu Buttons)"
-#~ msgstr "Breite der Kanallogos auf den Men�buttons"
-
-#~ msgid "Channel Logo Height (on the Menu Buttons)"
-#~ msgstr "H�he der Kanallogos auf den Men�buttons"
-
-#~ msgid "Channel Logo Width (on timers in main menu)"
-#~ msgstr "Breite der Kanallogos auf den Timern im Hauptmen�"
-
-#~ msgid "Channel Logo Height (on timers in main menu)"
-#~ msgstr "H�he der Kanallogos auf den Timern im Hauptmen�"
-
-#~ msgid "Main Menu Header Logo Width"
-#~ msgstr "H�he des Logos im Hauptmen�"
-
-#~ msgid "Main Menu Header Logo Height"
-#~ msgstr "Breite des Logos im Hauptmen�"
-
-#~ msgid "Recordings Menu Folder Icon Size"
-#~ msgstr "Ordner Icon Gr��e im Aufnahmeverzeichnis"
+msgid "conflict"
+msgstr "konflikt"
-#~ msgid "Adjust Font Size - Large Menu Item"
-#~ msgstr "Nastavenie ve�kosti p�sma - Ve�k� Menu polo�ka"
+msgid "conflicts"
+msgstr "konflikty"
-#~ msgid "Adjust Font Size - Schedule Menu Item"
-#~ msgstr "Nastavenie ve�kosti p�sma - Programm�bersicht Men�buttons"
+#~ msgid "Display additional EPG Pictures in detailed recording View"
+#~ msgstr "Zobrazi� �al�ie EPG obr�zky v podrobnom zobrazen� nahr�vky"
-#~ msgid "Adjust Font Size - Schedule Menu Item Small"
-#~ msgstr "Nastavenie ve�kosti p�sma - Programm�bersicht Men�buttons klein"
+#~ msgid "Number of EPG pictures to display"
+#~ msgstr "Po�et EPG obr�zkov na obrazovke"
-#~ msgid "Adjust Font Size - Channels Menu Item"
-#~ msgstr "Nastavenie ve�kosti p�sma - Kan�le Men�buttons"
+#~ msgid "Border around detailed EPG view"
+#~ msgstr "Okraj okolo podrobn�ho zobrazenia EPG"
-#~ msgid "Adjust Font Size - Channels Menu Item Small"
-#~ msgstr "Nastavenie ve�kosti p�sma - Kan�le Men�buttons klein"
+#~ msgid "Display Reruns in detailed EPG View"
+#~ msgstr "Zobrazi� repr�zy v podrobnostiach EPG"
-#~ msgid "Adjust Font Size - Recordings Menu Item"
-#~ msgstr "Nastavenie ve�kosti p�sma - Aufzeichnungen Men�buttons"
+#~ msgid "Display additional EPG Pictures in detailed EPG View"
+#~ msgstr "Zobrazi� viac obr�zkov v podrobnostiach EPG"
-#~ msgid "Adjust Font Size - Recordings Menu Item Small"
-#~ msgstr "Nastavenie ve�kosti p�sma - Aufzeichnungen Men�buttons klein"
+#~ msgid "Detail EPG View EPG Image Width"
+#~ msgstr "��rka obr�zku v podrobnom zobrazen� EPG"
-#~ msgid "Adjust Font Size - Timers Menu Item"
-#~ msgstr "Nastavenie ve�kosti p�sma - Timer Men�buttons"
+#~ msgid "Detail EPG View EPG Image Height"
+#~ msgstr "V��ka obr�zku v podrobnom zobrazen� EPG"
-#~ msgid "Adjust Font Size - Timers Menu Item Small"
-#~ msgstr "Nastavenie ve�kosti p�sma - Timer Men�buttons klein"
+#~ msgid "Detail EPG View additional EPG Image Width"
+#~ msgstr "��rka �al�ieho obr�zku v podrobnom zobrazen� EPG"
-#~ msgid "Adjust Font Size - Disc Usage (free)"
-#~ msgstr "Nastavenie ve�kosti p�sma - Festplatte frei"
+#~ msgid "Detail EPG View additional EPG Image Height"
+#~ msgstr "V��ka �al�ieho obr�zku v podrobnom zobrazen� EPG"
-#~ msgid "Adjust Font Size - Disc Usage (percent)"
-#~ msgstr "Nastavenie ve�kosti p�sma - Festplatte Prozent"
+#~ msgid "RERUNS OF THIS SHOW"
+#~ msgstr "Repr�za"
-#~ msgid "Adjust Font Size - Timers Header"
-#~ msgstr "Nastavenie ve�kosti p�sma - Timer Header"
+#~ msgid "Actors"
+#~ msgstr "Herci"
-#~ msgid "Adjust Font Size - Timers Title"
-#~ msgstr "Nastavenie ve�kosti p�sma - Timer Name"
+#~ msgid "Display Channel Source information"
+#~ msgstr "Zobrazi� zdroj kan�lu"
diff --git a/screenResSetup/skinnopacity-hdready.txt b/screenResSetup/skinnopacity-hdready.txt
new file mode 100644
index 0000000..a3d30bf
--- /dev/null
+++ b/screenResSetup/skinnopacity-hdready.txt
@@ -0,0 +1,143 @@
+skinnopacity.backgroundStyle = 0
+skinnopacity.channelBorderBottom = 15
+skinnopacity.channelBorderVertical = 15
+skinnopacity.channelFadeTime = 0
+skinnopacity.channelHeight = 25
+skinnopacity.checkTimerConflict = 1
+skinnopacity.cornerRadius = 12
+skinnopacity.detailViewLogoHeight = 200
+skinnopacity.detailViewLogoWidth = 260
+skinnopacity.discUsageStyle = 0
+skinnopacity.displayAdditionalEPGPictures = 1
+skinnopacity.displayAdditionalRecEPGPictures = 1
+skinnopacity.displayPrevNextChannelGroup = 1
+skinnopacity.displayRerunsDetailEPGView = 1
+skinnopacity.displayRSSFeed = 0
+skinnopacity.displaySignalStrength = 1
+skinnopacity.displaySourceInfo = 1
+skinnopacity.epgImageHeight = 160
+skinnopacity.epgImageHeightLarge = 400
+skinnopacity.epgImageWidth = 210
+skinnopacity.epgImageWidthLarge = 525
+skinnopacity.fontButtons = -3
+skinnopacity.fontChannelDateSize = 0
+skinnopacity.fontChannelGroupSize = 0
+skinnopacity.fontChannelGroupSmallSize = 0
+skinnopacity.fontChannelHeaderSize = 0
+skinnopacity.fontDate = 0
+skinnopacity.fontDetailView = 0
+skinnopacity.fontDetailViewHeader = 0
+skinnopacity.fontDetailViewHeaderLarge = 0
+skinnopacity.fontDiskUsage = 0
+skinnopacity.fontDiskUsagePercent = 0
+skinnopacity.fontEPGInfoWindow = 0
+skinnopacity.fontEPGSize = 0
+skinnopacity.fontEPGSmallSize = 0
+skinnopacity.fontHeader = 0
+skinnopacity.fontIndex = 93
+skinnopacity.fontMenuitemChannel = -1
+skinnopacity.fontMenuitemChannelSmall = 2
+skinnopacity.fontMenuitemDefault = 0
+skinnopacity.fontMenuitemLarge = 0
+skinnopacity.fontMenuitemRecordings = 0
+skinnopacity.fontMenuitemRecordingsSmall = 0
+skinnopacity.fontMenuitemSchedule = -2
+skinnopacity.fontMenuitemScheduleSmall = 2
+skinnopacity.fontMenuitemTimers = 0
+skinnopacity.fontMenuitemTimersSmall = 0
+skinnopacity.fontMessage = 0
+skinnopacity.fontMessageMenu = 0
+skinnopacity.fontReplay = 0
+skinnopacity.fontReplayHeader = 0
+skinnopacity.fontRssFeed = 0
+skinnopacity.fontRssFeedStandalone = 0
+skinnopacity.fontTimers = 0
+skinnopacity.fontTimersHead = 0
+skinnopacity.fontTracks = 0
+skinnopacity.fontTracksHeader = 0
+skinnopacity.fontVolume = 0
+skinnopacity.footerHeight = 8
+skinnopacity.headerHeight = 7
+skinnopacity.headerIconHeight = 50
+skinnopacity.iconHeight = 50
+skinnopacity.logoBorder = 15
+skinnopacity.logoHeight = 100
+skinnopacity.logoPosition = 1
+skinnopacity.logoWidth = 130
+skinnopacity.mainMenuTitleStyle = 0
+skinnopacity.menuAdjustLeft = 1
+skinnopacity.menuChannelDisplayMode = 0
+skinnopacity.menuEPGWindowFadeTime = 300
+skinnopacity.menuFadeTime = 0
+skinnopacity.menuHeaderLogoHeight = 70
+skinnopacity.menuHeaderLogoWidth = 160
+skinnopacity.menuHeightInfoWindow = 20
+skinnopacity.menuInfoScrollDelay = 5
+skinnopacity.menuInfoScrollSpeed = 2
+skinnopacity.menuInfoTextDelay = 2
+skinnopacity.menuItemLogoHeight = 60
+skinnopacity.menuItemLogoWidth = 65
+skinnopacity.menuRecFolderSize = 128
+skinnopacity.menuScrollDelay = 1
+skinnopacity.menuScrollSpeed = 3
+skinnopacity.menuSizeDiskUsage = 12
+skinnopacity.menuWidthChannels = 30
+skinnopacity.menuWidthMain = 30
+skinnopacity.menuWidthRecordings = 30
+skinnopacity.menuWidthRightItems = 12
+skinnopacity.menuWidthSchedules = 30
+skinnopacity.menuWidthSetup = 30
+skinnopacity.menuWidthTimers = 30
+skinnopacity.messageBorderBottom = 10
+skinnopacity.messageFadeTime = 300
+skinnopacity.messageHeight = 10
+skinnopacity.messageWidth = 90
+skinnopacity.narrowChannelMenu = 1
+skinnopacity.narrowMainMenu = 1
+skinnopacity.narrowRecordingMenu = 1
+skinnopacity.narrowScheduleMenu = 1
+skinnopacity.narrowSetupMenu = 1
+skinnopacity.narrowTimerMenu = 1
+skinnopacity.numAdditionalEPGPictures = 9
+skinnopacity.numAdditionalRecEPGPictures = 9
+skinnopacity.numberTimers = 10
+skinnopacity.numDefaultMenuItems = 16
+skinnopacity.numEPGEntriesChannelsMenu = 15
+skinnopacity.numReruns = 5
+skinnopacity.progressCurrentSchedule = 0
+skinnopacity.replayBorderBottom = 15
+skinnopacity.replayBorderVertical = 15
+skinnopacity.replayFadeTime = 300
+skinnopacity.replayHeight = 25
+skinnopacity.resolutionIconSize = 50
+skinnopacity.roundedCorners = 0
+skinnopacity.roundedCornersChannel = 1
+skinnopacity.rssFeed[0] = 0
+skinnopacity.rssFeed[1] = 0
+skinnopacity.rssFeed[2] = 0
+skinnopacity.rssFeed[3] = 0
+skinnopacity.rssFeed[4] = 0
+skinnopacity.rssFeedHeight = 5
+skinnopacity.rssFeedHeightStandalone = 7
+skinnopacity.rssFeedStandalonePos = 0
+skinnopacity.rssScrollDelay = 2
+skinnopacity.rssScrollSpeed = 1
+skinnopacity.scalePicture = 1
+skinnopacity.showDiscUsage = 0
+skinnopacity.showTimers = 1
+skinnopacity.statusIconSize = 32
+skinnopacity.symbolStyle = 0
+skinnopacity.timersLogoHeight = 40
+skinnopacity.timersLogoWidth = 52
+skinnopacity.tracksBorderHorizontal = 10
+skinnopacity.tracksBorderVertical = 10
+skinnopacity.tracksFadeTime = 300
+skinnopacity.tracksItemHeight = 50
+skinnopacity.tracksPosition = 0
+skinnopacity.tracksWidth = 25
+skinnopacity.useMenuIcons = 1
+skinnopacity.useSubtitleRerun = 1
+skinnopacity.volumeBorderBottom = 10
+skinnopacity.volumeFadeTime = 300
+skinnopacity.volumeHeight = 10
+skinnopacity.volumeWidth = 40
diff --git a/screenResSetup/skinnopacity-sd.txt b/screenResSetup/skinnopacity-sd.txt
new file mode 100644
index 0000000..1acc8b5
--- /dev/null
+++ b/screenResSetup/skinnopacity-sd.txt
@@ -0,0 +1,144 @@
+OSDSkin = nOpacity
+skinnopacity.backgroundStyle = 0
+skinnopacity.channelBorderBottom = 15
+skinnopacity.channelBorderVertical = 15
+skinnopacity.channelFadeTime = 300
+skinnopacity.channelHeight = 25
+skinnopacity.checkTimerConflict = 1
+skinnopacity.cornerRadius = 12
+skinnopacity.detailViewLogoHeight = 140
+skinnopacity.detailViewLogoWidth = 200
+skinnopacity.discUsageStyle = 0
+skinnopacity.displayAdditionalEPGPictures = 1
+skinnopacity.displayAdditionalRecEPGPictures = 0
+skinnopacity.displayPrevNextChannelGroup = 1
+skinnopacity.displayRerunsDetailEPGView = 1
+skinnopacity.displayRSSFeed = 0
+skinnopacity.displaySignalStrength = 1
+skinnopacity.displaySourceInfo = 1
+skinnopacity.epgImageHeight = 160
+skinnopacity.epgImageHeightLarge = 401
+skinnopacity.epgImageWidth = 210
+skinnopacity.epgImageWidthLarge = 525
+skinnopacity.fontButtons = 0
+skinnopacity.fontChannelDateSize = 1
+skinnopacity.fontChannelGroupSize = 0
+skinnopacity.fontChannelGroupSmallSize = 0
+skinnopacity.fontChannelHeaderSize = -2
+skinnopacity.fontDate = 0
+skinnopacity.fontDetailView = 0
+skinnopacity.fontDetailViewHeader = -9
+skinnopacity.fontDetailViewHeaderLarge = -15
+skinnopacity.fontDiskUsage = 0
+skinnopacity.fontDiskUsagePercent = 0
+skinnopacity.fontEPGInfoWindow = -7
+skinnopacity.fontEPGSize = 0
+skinnopacity.fontEPGSmallSize = 3
+skinnopacity.fontHeader = 0
+skinnopacity.fontIndex = 78
+skinnopacity.fontMenuitemChannel = 0
+skinnopacity.fontMenuitemChannelSmall = 0
+skinnopacity.fontMenuitemDefault = 0
+skinnopacity.fontMenuitemLarge = -12
+skinnopacity.fontMenuitemRecordings = -5
+skinnopacity.fontMenuitemRecordingsSmall = 10
+skinnopacity.fontMenuitemSchedule = 0
+skinnopacity.fontMenuitemScheduleSmall = 0
+skinnopacity.fontMenuitemTimers = -10
+skinnopacity.fontMenuitemTimersSmall = -10
+skinnopacity.fontMessage = 0
+skinnopacity.fontMessageMenu = 0
+skinnopacity.fontReplay = 0
+skinnopacity.fontReplayHeader = 0
+skinnopacity.fontRssFeed = 0
+skinnopacity.fontRssFeedStandalone = 0
+skinnopacity.fontTimers = 0
+skinnopacity.fontTimersHead = 0
+skinnopacity.fontTracks = 0
+skinnopacity.fontTracksHeader = 0
+skinnopacity.fontVolume = 0
+skinnopacity.footerHeight = 7
+skinnopacity.headerHeight = 7
+skinnopacity.headerIconHeight = 40
+skinnopacity.iconHeight = 60
+skinnopacity.logoBorder = 15
+skinnopacity.logoHeight = 80
+skinnopacity.logoPosition = 0
+skinnopacity.logoWidth = 140
+skinnopacity.mainMenuTitleStyle = 0
+skinnopacity.menuAdjustLeft = 1
+skinnopacity.menuChannelDisplayMode = 0
+skinnopacity.menuEPGWindowFadeTime = 300
+skinnopacity.menuFadeTime = 0
+skinnopacity.menuHeaderLogoHeight = 60
+skinnopacity.menuHeaderLogoWidth = 90
+skinnopacity.menuHeightInfoWindow = 20
+skinnopacity.menuInfoScrollDelay = 5
+skinnopacity.menuInfoScrollSpeed = 2
+skinnopacity.menuInfoTextDelay = 2
+skinnopacity.menuItemLogoHeight = 30
+skinnopacity.menuItemLogoWidth = 60
+skinnopacity.menuRecFolderSize = 64
+skinnopacity.menuScrollDelay = 1
+skinnopacity.menuScrollSpeed = 2
+skinnopacity.menuSizeDiskUsage = 12
+skinnopacity.menuWidthChannels = 30
+skinnopacity.menuWidthMain = 40
+skinnopacity.menuWidthRecordings = 30
+skinnopacity.menuWidthRightItems = 12
+skinnopacity.menuWidthSchedules = 30
+skinnopacity.menuWidthSetup = 30
+skinnopacity.menuWidthTimers = 40
+skinnopacity.messageBorderBottom = 10
+skinnopacity.messageFadeTime = 300
+skinnopacity.messageHeight = 10
+skinnopacity.messageWidth = 90
+skinnopacity.narrowChannelMenu = 0
+skinnopacity.narrowMainMenu = 0
+skinnopacity.narrowRecordingMenu = 0
+skinnopacity.narrowScheduleMenu = 0
+skinnopacity.narrowSetupMenu = 0
+skinnopacity.narrowTimerMenu = 0
+skinnopacity.numAdditionalEPGPictures = 9
+skinnopacity.numAdditionalRecEPGPictures = 9
+skinnopacity.numberTimers = 10
+skinnopacity.numDefaultMenuItems = 16
+skinnopacity.numEPGEntriesChannelsMenu = 15
+skinnopacity.numReruns = 5
+skinnopacity.progressCurrentSchedule = 0
+skinnopacity.replayBorderBottom = 15
+skinnopacity.replayBorderVertical = 15
+skinnopacity.replayFadeTime = 300
+skinnopacity.replayHeight = 25
+skinnopacity.resolutionIconSize = 60
+skinnopacity.roundedCorners = 1
+skinnopacity.roundedCornersChannel = 1
+skinnopacity.rssFeed[0] = 0
+skinnopacity.rssFeed[1] = 0
+skinnopacity.rssFeed[2] = 0
+skinnopacity.rssFeed[3] = 0
+skinnopacity.rssFeed[4] = 0
+skinnopacity.rssFeedHeight = 5
+skinnopacity.rssFeedHeightStandalone = 7
+skinnopacity.rssFeedStandalonePos = 0
+skinnopacity.rssScrollDelay = 2
+skinnopacity.rssScrollSpeed = 1
+skinnopacity.scalePicture = 0
+skinnopacity.showDiscUsage = 0
+skinnopacity.showTimers = 0
+skinnopacity.statusIconSize = 30
+skinnopacity.symbolStyle = 0
+skinnopacity.timersLogoHeight = 70
+skinnopacity.timersLogoWidth = 90
+skinnopacity.tracksBorderHorizontal = 10
+skinnopacity.tracksBorderVertical = 10
+skinnopacity.tracksFadeTime = 300
+skinnopacity.tracksItemHeight = 80
+skinnopacity.tracksPosition = 0
+skinnopacity.tracksWidth = 25
+skinnopacity.useMenuIcons = 1
+skinnopacity.useSubtitleRerun = 1
+skinnopacity.volumeBorderBottom = 10
+skinnopacity.volumeFadeTime = 300
+skinnopacity.volumeHeight = 10
+skinnopacity.volumeWidth = 80
diff --git a/services/remotetimers.h b/services/remotetimers.h
index a69a7a0..ea31124 100644
--- a/services/remotetimers.h
+++ b/services/remotetimers.h
@@ -25,7 +25,7 @@
#define _SERVICE__H
#ifndef __TIMERS_H
-#include <vdr/timer.h>
+#include <vdr/timers.h>
#include <vdr/epg.h>
#endif
diff --git a/services/scraper2vdr.h b/services/scraper2vdr.h
new file mode 100644
index 0000000..3538130
--- /dev/null
+++ b/services/scraper2vdr.h
@@ -0,0 +1,196 @@
+#ifndef __SCRAPER2VDRSERVICES_H
+#define __SCRAPER2VDRSERVICES_H
+
+#include <string>
+#include <vector>
+#include <vdr/epg.h>
+#include <vdr/recording.h>
+
+enum tvType {
+ tSeries,
+ tMovie,
+ tNone,
+};
+
+/*********************************************************************
+* Helper Structures
+*********************************************************************/
+class cTvMedia {
+public:
+ cTvMedia(void) {
+ path = "";
+ width = height = 0;
+ };
+ std::string path;
+ int width;
+ int height;
+};
+
+class cEpisode {
+public:
+ cEpisode(void) {
+ number = 0;
+ season = 0;
+ name = "";
+ firstAired = "";
+ guestStars = "";
+ overview = "";
+ rating = 0.0;
+ };
+ int number;
+ int season;
+ std::string name;
+ std::string firstAired;
+ std::string guestStars;
+ std::string overview;
+ float rating;
+ cTvMedia episodeImage;
+};
+
+class cActor {
+public:
+ cActor(void) {
+ name = "";
+ role = "";
+ };
+ std::string name;
+ std::string role;
+ cTvMedia actorThumb;
+};
+
+/*********************************************************************
+* Data Structures for Service Calls
+*********************************************************************/
+
+// Data structure for service "GetEventType"
+class ScraperGetEventType {
+public:
+ ScraperGetEventType(void) {
+ event = NULL;
+ recording = NULL;
+ type = tNone;
+ movieId = 0;
+ seriesId = 0;
+ episodeId = 0;
+ };
+// in
+ const cEvent *event; // check type for this event
+ const cRecording *recording; // or for this recording
+//out
+ tvType type; //typeSeries or typeMovie
+ int movieId;
+ int seriesId;
+ int episodeId;
+};
+
+//Data structure for full series and episode information
+class cMovie {
+public:
+ cMovie(void) {
+ title = "";
+ originalTitle = "";
+ tagline = "";
+ overview = "";
+ adult = false;
+ collectionName = "";
+ budget = 0;
+ revenue = 0;
+ genres = "";
+ homepage = "";
+ releaseDate = "";
+ runtime = 0;
+ popularity = 0.0;
+ voteAverage = 0.0;
+ };
+//IN
+ int movieId; // movieId fetched from ScraperGetEventType
+//OUT
+ std::string title;
+ std::string originalTitle;
+ std::string tagline;
+ std::string overview;
+ bool adult;
+ std::string collectionName;
+ int budget;
+ int revenue;
+ std::string genres;
+ std::string homepage;
+ std::string releaseDate;
+ int runtime;
+ float popularity;
+ float voteAverage;
+ cTvMedia poster;
+ cTvMedia fanart;
+ cTvMedia collectionPoster;
+ cTvMedia collectionFanart;
+ std::vector<cActor> actors;
+};
+
+//Data structure for full series and episode information
+class cSeries {
+public:
+ cSeries(void) {
+ seriesId = 0;
+ episodeId = 0;
+ name = "";
+ overview = "";
+ firstAired = "";
+ network = "";
+ genre = "";
+ rating = 0.0;
+ status = "";
+ };
+//IN
+ int seriesId; // seriesId fetched from ScraperGetEventType
+ int episodeId; // episodeId fetched from ScraperGetEventType
+//OUT
+ std::string name;
+ std::string overview;
+ std::string firstAired;
+ std::string network;
+ std::string genre;
+ float rating;
+ std::string status;
+ cEpisode episode;
+ std::vector<cActor> actors;
+ std::vector<cTvMedia> posters;
+ std::vector<cTvMedia> banners;
+ std::vector<cTvMedia> fanarts;
+ cTvMedia seasonPoster;
+};
+
+// Data structure for service "GetPosterBanner"
+class ScraperGetPosterBanner {
+public:
+ ScraperGetPosterBanner(void) {
+ type = tNone;
+ };
+// in
+ const cEvent *event; // check type for this event
+//out
+ tvType type; //typeSeries or typeMovie
+ cTvMedia poster;
+ cTvMedia banner;
+};
+
+// Data structure for service "GetPoster"
+class ScraperGetPoster {
+public:
+// in
+ const cEvent *event; // check type for this event
+ const cRecording *recording; // or for this recording
+//out
+ cTvMedia poster;
+};
+
+// Data structure for service "GetPosterThumb"
+class ScraperGetPosterThumb {
+public:
+// in
+ const cEvent *event; // check type for this event
+ const cRecording *recording; // or for this recording
+//out
+ cTvMedia poster;
+};
+
+#endif //__SCRAPER2VDRSERVICES_H
\ No newline at end of file
diff --git a/setup.c b/setup.c
index 510f4c9..169e698 100644
--- a/setup.c
+++ b/setup.c
@@ -1,38 +1,47 @@
#include "setup.h"
-cNopacitySetup::cNopacitySetup() {
- tmpNopacityConfig = config;
+cNopacitySetup::cNopacitySetup(cImageCache *imgCache) {
+ this->imgCache = imgCache;
+ tmpConf = config;
cFont::GetAvailableFontNames(&fontNames);
fontNames.Insert(strdup(config.fontDefaultName));
Setup();
}
cNopacitySetup::~cNopacitySetup() {
+ config.SetFontName();
+ int start = cTimeMs::Now();
+ geoManager->SetGeometry();
+ fontManager->DeleteFonts();
+ fontManager->SetFonts();
+ imgCache->Reload();
+ dsyslog("nopacity: Cache reloaded in %d ms", int(cTimeMs::Now()-start));
}
void cNopacitySetup::Setup(void) {
int currentItem = Current();
Clear();
- Add(new cMenuEditStraItem(tr("Font"), &tmpNopacityConfig.fontIndex, fontNames.Size(), &fontNames[0]));
+ Add(new cMenuEditStraItem(tr("Font"), tmpConf.GetValueRef("fontIndex"), fontNames.Size(), &fontNames[0]));
Add(new cOsdItem(tr("VDR Menu: Common Settings")));
Add(new cOsdItem(tr("VDR Menu: Main and Setup Menu")));
Add(new cOsdItem(tr("VDR Menu: Schedules Menu")));
Add(new cOsdItem(tr("VDR Menu: Channels Menu")));
Add(new cOsdItem(tr("VDR Menu: Timers Menu")));
Add(new cOsdItem(tr("VDR Menu: Recordings Menu")));
+ Add(new cOsdItem(tr("VDR Menu: Detailed EPG & Recordings View")));
Add(new cOsdItem(tr("Channel Switching")));
Add(new cOsdItem(tr("Replay")));
Add(new cOsdItem(tr("Audio Tracks")));
Add(new cOsdItem(tr("Messages")));
Add(new cOsdItem(tr("Volume")));
-
+ Add(new cOsdItem(tr("Image Caching")));
SetCurrent(Get(currentItem));
Display();
}
eOSState cNopacitySetup::ProcessKey(eKeys Key) {
- bool hadSubMenu = HasSubMenu();
+ bool hadSubMenu = HasSubMenu();
eOSState state = cMenuSetupPage::ProcessKey(Key);
if (hadSubMenu && Key == kOk)
Store();
@@ -40,160 +49,56 @@ eOSState cNopacitySetup::ProcessKey(eKeys Key) {
if ((Key == kOk && !hadSubMenu)) {
const char* ItemText = Get(Current())->Text();
if (strcmp(ItemText, tr("VDR Menu: Common Settings")) == 0)
- state = AddSubMenu(new cNopacitySetupMenuDisplay(&tmpNopacityConfig));
+ state = AddSubMenu(new cNopacitySetupMenuDisplay(&tmpConf));
if (strcmp(ItemText, tr("VDR Menu: Main and Setup Menu")) == 0)
- state = AddSubMenu(new cNopacitySetupMenuDisplayMain(&tmpNopacityConfig));
+ state = AddSubMenu(new cNopacitySetupMenuDisplayMain(&tmpConf));
if (strcmp(ItemText, tr("VDR Menu: Schedules Menu")) == 0)
- state = AddSubMenu(new cNopacitySetupMenuDisplaySchedules(&tmpNopacityConfig));
+ state = AddSubMenu(new cNopacitySetupMenuDisplaySchedules(&tmpConf));
if (strcmp(ItemText, tr("VDR Menu: Channels Menu")) == 0)
- state = AddSubMenu(new cNopacitySetupMenuDisplayChannels(&tmpNopacityConfig));
+ state = AddSubMenu(new cNopacitySetupMenuDisplayChannels(&tmpConf));
if (strcmp(ItemText, tr("VDR Menu: Timers Menu")) == 0)
- state = AddSubMenu(new cNopacitySetupMenuDisplayTimers(&tmpNopacityConfig));
+ state = AddSubMenu(new cNopacitySetupMenuDisplayTimers(&tmpConf));
if (strcmp(ItemText, tr("VDR Menu: Recordings Menu")) == 0)
- state = AddSubMenu(new cNopacitySetupMenuDisplayRecordings(&tmpNopacityConfig));
+ state = AddSubMenu(new cNopacitySetupMenuDisplayRecordings(&tmpConf));
+ if (strcmp(ItemText, tr("VDR Menu: Detailed EPG & Recordings View")) == 0)
+ state = AddSubMenu(new cNopacitySetupDetailedView(&tmpConf));
if (strcmp(ItemText, tr("Channel Switching")) == 0)
- state = AddSubMenu(new cNopacitySetupChannelDisplay(&tmpNopacityConfig));
+ state = AddSubMenu(new cNopacitySetupChannelDisplay(&tmpConf));
if (strcmp(ItemText, tr("Replay")) == 0)
- state = AddSubMenu(new cNopacitySetupReplayDisplay(&tmpNopacityConfig));
+ state = AddSubMenu(new cNopacitySetupReplayDisplay(&tmpConf));
if (strcmp(ItemText, tr("Audio Tracks")) == 0)
- state = AddSubMenu(new cNopacitySetupTrackDisplay(&tmpNopacityConfig));
+ state = AddSubMenu(new cNopacitySetupTrackDisplay(&tmpConf));
if (strcmp(ItemText, tr("Messages")) == 0)
- state = AddSubMenu(new cNopacitySetupMessageDisplay(&tmpNopacityConfig));
+ state = AddSubMenu(new cNopacitySetupMessageDisplay(&tmpConf));
if (strcmp(ItemText, tr("Volume")) == 0)
- state = AddSubMenu(new cNopacitySetupVolumeDisplay(&tmpNopacityConfig));
+ state = AddSubMenu(new cNopacitySetupVolumeDisplay(&tmpConf));
+ if (strcmp(ItemText, tr("Image Caching")) == 0)
+ state = AddSubMenu(new cNopacitySetupCaching(&tmpConf, imgCache));
}
- }
+ }
return state;
}
void cNopacitySetup::Store(void) {
- config = tmpNopacityConfig;
- SetupStore("fontIndex", config.fontIndex);
- SetupStore("channelHeight", config.channelHeight);
- SetupStore("channelBorderVertical", config.channelBorderVertical);
- SetupStore("channelBorderBottom", config.channelBorderBottom);
- SetupStore("logoPosition", config.logoPosition);
- SetupStore("logoWidth", config.logoWidth);
- SetupStore("logoHeight", config.logoHeight);
- SetupStore("logoBorder", config.logoBorder);
- SetupStore("displaySignalStrength", config.displaySignalStrength);
- SetupStore("channelFadeTime", config.channelFadeTime);
- SetupStore("fontChannelHeaderSize", config.fontChannelHeaderSize);
- SetupStore("fontChannelDateSize", config.fontChannelDateSize);
- SetupStore("fontEPGSize", config.fontEPGSize);
- SetupStore("fontEPGSmallSize", config.fontEPGSmallSize);
- SetupStore("resolutionIconSize", config.resolutionIconSize);
- SetupStore("statusIconSize", config.statusIconSize);
- SetupStore("progressCurrentSchedule", config.progressCurrentSchedule);
- SetupStore("replayHeight", config.replayHeight);
- SetupStore("replayBorderVertical", config.replayBorderVertical);
- SetupStore("replayBorderBottom", config.replayBorderBottom);
- SetupStore("replayFadeTime", config.replayFadeTime);
- SetupStore("fontReplayHeader", config.fontReplayHeader);
- SetupStore("fontReplay", config.fontReplay);
- SetupStore("messageWidth", config.messageWidth);
- SetupStore("messageHeight", config.messageHeight);
- SetupStore("messageBorderBottom", config.messageBorderBottom);
- SetupStore("fontMessage", config.fontMessage);
- SetupStore("messageFadeTime", config.messageFadeTime);
- SetupStore("tracksFadeTime", config.tracksFadeTime);
- SetupStore("tracksWidth", config.tracksWidth);
- SetupStore("tracksItemHeight", config.tracksItemHeight);
- SetupStore("tracksPosition", config.tracksPosition);
- SetupStore("tracksBorderHorizontal", config.tracksBorderHorizontal);
- SetupStore("tracksBorderVertical", config.tracksBorderVertical);
- SetupStore("fontTracksHeader", config.fontTracksHeader);
- SetupStore("fontTracks", config.fontTracks);
- SetupStore("volumeFadeTime", config.volumeFadeTime);
- SetupStore("volumeWidth", config.volumeWidth);
- SetupStore("volumeHeight", config.volumeHeight);
- SetupStore("volumeBorderBottom", config.volumeBorderBottom);
- SetupStore("fontVolume", config.fontVolume);
- SetupStore("menuAdjustLeft", config.menuAdjustLeft);
- SetupStore("scalePicture", config.scalePicture);
- SetupStore("roundedCorners", config.roundedCorners);
- SetupStore("cornerRadius", config.cornerRadius);
- SetupStore("useMenuIcons", config.useMenuIcons);
- SetupStore("mainMenuTitleStyle", config.mainMenuTitleStyle);
- SetupStore("narrowMainMenu", config.narrowMainMenu);
- SetupStore("narrowScheduleMenu", config.narrowScheduleMenu);
- SetupStore("narrowChannelMenu", config.narrowChannelMenu);
- SetupStore("narrowTimerMenu", config.narrowTimerMenu);
- SetupStore("narrowRecordingMenu", config.narrowRecordingMenu);
- SetupStore("narrowSetupMenu", config.narrowSetupMenu);
- SetupStore("displayRerunsDetailEPGView", config.displayRerunsDetailEPGView);
- SetupStore("numReruns", config.numReruns);
- SetupStore("useSubtitleRerun", config.useSubtitleRerun);
- SetupStore("displayAdditionalEPGPictures", config.displayAdditionalEPGPictures);
- SetupStore("numAdditionalEPGPictures", config.numAdditionalEPGPictures);
- SetupStore("displayAdditionalRecEPGPictures", config.displayAdditionalRecEPGPictures);
- SetupStore("numAdditionalRecEPGPictures", config.numAdditionalRecEPGPictures);
- SetupStore("menuFadeTime", config.menuFadeTime);
- SetupStore("menuScrollDelay", config.menuScrollDelay);
- SetupStore("menuScrollSpeed", config.menuScrollSpeed);
- SetupStore("menuWidthMain", config.menuWidthMain);
- SetupStore("menuWidthSchedules", config.menuWidthSchedules);
- SetupStore("menuWidthChannels", config.menuWidthChannels);
- SetupStore("menuWidthTimers", config.menuWidthTimers);
- SetupStore("menuWidthRecordings", config.menuWidthRecordings);
- SetupStore("menuWidthSetup", config.menuWidthSetup);
- SetupStore("menuWidthRightItems", config.menuWidthRightItems);
- SetupStore("menuSizeDiskUsage", config.menuSizeDiskUsage);
- SetupStore("menuHeightInfoWindow", config.menuHeightInfoWindow);
- SetupStore("menuEPGWindowFadeTime", config.menuEPGWindowFadeTime);
- SetupStore("menuInfoTextDelay", config.menuInfoTextDelay);
- SetupStore("menuInfoScrollDelay", config.menuInfoScrollDelay);
- SetupStore("menuInfoScrollSpeed", config.menuInfoScrollSpeed);
- SetupStore("showDiscUsage", config.showDiscUsage);
- SetupStore("showTimers", config.showTimers);
- SetupStore("numberTimers", config.numberTimers);
- SetupStore("checkTimerConflict", config.checkTimerConflict);
- SetupStore("headerHeight", config.headerHeight);
- SetupStore("footerHeight", config.footerHeight);
- SetupStore("numDefaultMenuItems", config.numDefaultMenuItems);
- SetupStore("iconHeight", config.iconHeight);
- SetupStore("headerIconHeight", config.headerIconHeight);
- SetupStore("menuItemLogoWidth", config.menuItemLogoWidth);
- SetupStore("menuItemLogoHeight", config.menuItemLogoHeight);
- SetupStore("menuHeaderLogoWidth", config.menuHeaderLogoWidth);
- SetupStore("menuHeaderLogoHeight", config.menuHeaderLogoHeight);
- SetupStore("detailViewLogoWidth", config.detailViewLogoWidth);
- SetupStore("detailViewLogoHeight", config.detailViewLogoHeight);
- SetupStore("timersLogoWidth", config.timersLogoWidth);
- SetupStore("timersLogoHeight", config.timersLogoHeight);
- SetupStore("epgImageWidth", config.epgImageWidth);
- SetupStore("epgImageHeight", config.epgImageHeight);
- SetupStore("epgImageWidthLarge", config.epgImageWidthLarge);
- SetupStore("epgImageHeightLarge", config.epgImageHeightLarge);
- SetupStore("menuRecFolderSize", config.menuRecFolderSize);
- SetupStore("fontHeader", config.fontHeader);
- SetupStore("fontDate", config.fontDate);
- SetupStore("fontMenuitemLarge", config.fontMenuitemLarge);
- SetupStore("fontMenuitemSchedule", config.fontMenuitemSchedule);
- SetupStore("fontMenuitemScheduleSmall", config.fontMenuitemScheduleSmall);
- SetupStore("fontMenuitemChannel", config.fontMenuitemChannel);
- SetupStore("fontMenuitemChannelSmall", config.fontMenuitemChannelSmall);
- SetupStore("fontMenuitemRecordings", config.fontMenuitemRecordings);
- SetupStore("fontMenuitemRecordingsSmall", config.fontMenuitemRecordingsSmall);
- SetupStore("fontMenuitemTimers", config.fontMenuitemTimers);
- SetupStore("fontMenuitemTimersSmall", config.fontMenuitemTimersSmall);
- SetupStore("fontMenuitemDefault", config.fontMenuitemDefault);
- SetupStore("fontDiskUsage", config.fontDiskUsage);
- SetupStore("fontDiskUsagePercent", config.fontDiskUsagePercent);
- SetupStore("fontTimersHead", config.fontTimersHead);
- SetupStore("fontTimers", config.fontTimers);
- SetupStore("fontButtons", config.fontButtons);
- SetupStore("fontMessageMenu", config.fontMessageMenu);
- SetupStore("fontDetailView", config.fontDetailView);
- SetupStore("fontDetailViewHeader", config.fontDetailViewHeader);
- SetupStore("fontDetailViewHeaderLarge", config.fontDetailViewHeaderLarge);
- SetupStore("fontEPGInfoWindow", config.fontEPGInfoWindow);
+ const char *themeName = Skins.Current()->Theme()->Name();
+ for(std::map<std::string, int>::const_iterator it = tmpConf.GetStart(); it != tmpConf.GetEnd(); it++) {
+ std::string name = (std::string)it->first;
+ int value = (int)it->second;
+ int origValue = config.GetValue(name);
+ if (value != origValue) {
+ //Save changed value in setup.conf
+ SetupStore(*cString::sprintf("%s.%s", themeName, name.c_str()), value);
+ //Save changed value also in cConfig::themeConfigSetup
+ tmpConf.SetThemeConfigSetupValue(themeName, name, value);
+ }
+ }
+ config = tmpConf;
}
//------------------------------------------------------------------------------------------------------------------
cMenuSetupSubMenu::cMenuSetupSubMenu(const char* Title, cNopacityConfig* data) : cOsdMenu(Title, 30) {
- tmpNopacityConfig = data;
+ tmpConf = data;
spacer = " ";
}
@@ -224,36 +129,44 @@ eOSState cMenuSetupSubMenu::ProcessKey(eKeys Key) {
cNopacitySetupMenuDisplay::cNopacitySetupMenuDisplay(cNopacityConfig* data) : cMenuSetupSubMenu(tr("VDR Menu: Common Settings"), data) {
adjustLeft[0] = tr("right");
adjustLeft[1] = tr("left");
+ scrollMode[0] = tr("Carriage Return");
+ scrollMode[1] = tr("Forward and Back again");
scrollSpeed[0] = tr("off");
scrollSpeed[1] = tr("slow");
scrollSpeed[2] = tr("medium");
scrollSpeed[3] = tr("fast");
+ scalePic[0] = tr("no");
+ scalePic[1] = tr("yes");
+ scalePic[2] = tr("auto");
Set();
}
void cNopacitySetupMenuDisplay::Set(void) {
int currentItem = Current();
Clear();
- Add(new cMenuEditIntItem(tr("Number of Default Menu Entries per Page"), &tmpNopacityConfig->numDefaultMenuItems, 10, 40));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Default Menu Item"), &tmpNopacityConfig->fontMenuitemDefault, -20, 20));
- Add(new cMenuEditStraItem(tr("Adjustment of narrow menus"), &tmpNopacityConfig->menuAdjustLeft, 2, adjustLeft));
- Add(new cMenuEditBoolItem(tr("Scale Video size to fit into menu window"), &tmpNopacityConfig->scalePicture));
- Add(new cMenuEditIntItem(tr("Header Height (Percent of OSD Height)"), &tmpNopacityConfig->headerHeight, 0, 30));
- Add(new cMenuEditIntItem(tr("Header Icon Size (Square Header Menu Icons)"), &tmpNopacityConfig->headerIconHeight, 30, 200));
- Add(new cMenuEditIntItem(tr("Footer Height (Percent of OSD Height)"), &tmpNopacityConfig->footerHeight, 0, 30));
- Add(new cMenuEditBoolItem(tr("Rounded Corners for menu items and buttons"), &tmpNopacityConfig->roundedCorners));
- if (tmpNopacityConfig->roundedCorners)
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Radius of rounded corners")), &tmpNopacityConfig->cornerRadius, 5, 30));
- Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), &tmpNopacityConfig->menuFadeTime, 0, 1000));
- Add(new cMenuEditStraItem(tr("Menu Items Scrolling Speed"), &tmpNopacityConfig->menuScrollSpeed, 4, scrollSpeed));
- Add(new cMenuEditIntItem(tr("Menu Items Scrolling Delay in s"), &tmpNopacityConfig->menuScrollDelay, 0, 3));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Header"), &tmpNopacityConfig->fontHeader, -20, 20));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Date"), &tmpNopacityConfig->fontDate, -20, 20));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Color Buttons"), &tmpNopacityConfig->fontButtons, -20, 20));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Messages"), &tmpNopacityConfig->fontMessageMenu, -20, 20));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Detail View Text"), &tmpNopacityConfig->fontDetailView, -20, 20));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Detail View Header"), &tmpNopacityConfig->fontDetailViewHeader, -20, 20));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Detail View Header Large"), &tmpNopacityConfig->fontDetailViewHeaderLarge, -20, 20));
+ Add(new cMenuEditBoolItem(tr("Create Log Messages for image loading"), tmpConf->GetValueRef("debugImageLoading")));
+ Add(new cMenuEditIntItem(tr("Number of Default Menu Entries per Page"), tmpConf->GetValueRef("numDefaultMenuItems"), 10, 40));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Default Menu Item"), tmpConf->GetValueRef("fontMenuitemDefault"), -20, 20));
+ Add(new cMenuEditStraItem(tr("Adjustment of narrow menus"), tmpConf->GetValueRef("menuAdjustLeft"), 2, adjustLeft));
+ Add(new cMenuEditStraItem(tr("Scale Video size to fit into menu window"), tmpConf->GetValueRef("scalePicture"), 3, scalePic));
+ Add(new cMenuEditIntItem(tr("Header Height (Percent of OSD Height)"), tmpConf->GetValueRef("headerHeight"), 5, 30));
+ Add(new cMenuEditIntItem(tr("Footer Height (Percent of OSD Height)"), tmpConf->GetValueRef("footerHeight"), 5, 30));
+ Add(new cMenuEditBoolItem(tr("Rounded Corners for menu items and buttons"), tmpConf->GetValueRef("roundedCorners")));
+ if (tmpConf->GetValue("roundedCorners"))
+ Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Radius of rounded corners")), tmpConf->GetValueRef("cornerRadius"), 5, 30));
+ Add(new cMenuEditBoolItem(tr("Use Channel Logo background"), tmpConf->GetValueRef("menuChannelLogoBackground")));
+ Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), tmpConf->GetValueRef("menuFadeTime"), 0, 1000));
+ Add(new cMenuEditStraItem(tr("Menu Items Scroll Style"), tmpConf->GetValueRef("scrollMode"), 2, scrollMode));
+ Add(new cMenuEditStraItem(tr("Menu Items Scrolling Speed"), tmpConf->GetValueRef("menuScrollSpeed"), 4, scrollSpeed));
+ Add(new cMenuEditIntItem(tr("Menu Items Scrolling Delay in s"), tmpConf->GetValueRef("menuScrollDelay"), 0, 3));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Header"), tmpConf->GetValueRef("fontHeader"), -20, 20));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Date"), tmpConf->GetValueRef("fontDate"), -20, 20));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Color Buttons"), tmpConf->GetValueRef("fontButtons"), -20, 20));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Messages"), tmpConf->GetValueRef("fontMessageMenu"), -20, 20));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Detail View Text"), tmpConf->GetValueRef("fontDetailView"), -20, 20));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Detail View Text Small"), tmpConf->GetValueRef("fontDetailViewSmall"), -20, 20));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Detail View Header"), tmpConf->GetValueRef("fontDetailViewHeader"), -20, 20));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Detail View Header Large"), tmpConf->GetValueRef("fontDetailViewHeaderLarge"), -20, 20));
SetCurrent(Get(currentItem));
Display();
@@ -265,43 +178,46 @@ cNopacitySetupMenuDisplayMain::cNopacitySetupMenuDisplayMain(cNopacityConfig* da
titleStyle[0] = tr("\"VDR\" plus VDR version");
titleStyle[1] = tr("only VDR version");
titleStyle[2] = tr("no title");
+ discUsageStyle[0] = tr("free time in hours");
+ discUsageStyle[1] = tr("free space in GB");
+ showTimers[0] = trVDR("no");
+ showTimers[1] = trVDR("yes");
+ showTimers[2] = tr("small without logo");
Set();
}
void cNopacitySetupMenuDisplayMain::Set(void) {
int currentItem = Current();
Clear();
- Add(new cMenuEditBoolItem(tr("Use narrow main menu"), &tmpNopacityConfig->narrowMainMenu));
- if (tmpNopacityConfig->narrowMainMenu)
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), &tmpNopacityConfig->menuWidthMain, 10, 100));
- Add(new cMenuEditBoolItem(tr("Use narrow setup menu"), &tmpNopacityConfig->narrowSetupMenu));
- if (tmpNopacityConfig->narrowSetupMenu)
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), &tmpNopacityConfig->menuWidthSetup, 10, 100));
-
- Add(new cMenuEditBoolItem(tr("Use menu icons"), &tmpNopacityConfig->useMenuIcons));
- if (tmpNopacityConfig->useMenuIcons)
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Icon Size (Square)")), &tmpNopacityConfig->iconHeight, 30, 200));
- Add(new cMenuEditStraItem(tr("Main menu title style"), &tmpNopacityConfig->mainMenuTitleStyle, 3, titleStyle));
- Add(new cMenuEditBoolItem(tr("Display Disk Usage"), &tmpNopacityConfig->showDiscUsage));
- if (tmpNopacityConfig->showDiscUsage) {
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Size (square, Percent of OSD Width)")), &tmpNopacityConfig->menuSizeDiskUsage, 2, 100));
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Adjust Font Size - free")), &tmpNopacityConfig->fontDiskUsage, -20, 20));
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Adjust Font Size - percent")), &tmpNopacityConfig->fontDiskUsagePercent, -20, 20));
+ Add(new cMenuEditBoolItem(tr("Use narrow main menu"), tmpConf->GetValueRef("narrowMainMenu")));
+ if (tmpConf->GetValue("narrowMainMenu"))
+ Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), tmpConf->GetValueRef("menuWidthMain"), 10, 97));
+ Add(new cMenuEditBoolItem(tr("Use narrow setup menu"), tmpConf->GetValueRef("narrowSetupMenu")));
+ if (tmpConf->GetValue("narrowSetupMenu"))
+ Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), tmpConf->GetValueRef("menuWidthSetup"), 10, 97));
+ Add(new cMenuEditIntItem(tr("Number of entires per page"), tmpConf->GetValueRef("numMainMenuItems"), 3, 20));
+ Add(new cMenuEditBoolItem(tr("Use menu icons"), tmpConf->GetValueRef("useMenuIcons")));
+ Add(new cMenuEditStraItem(tr("Main menu title style"), tmpConf->GetValueRef("mainMenuTitleStyle"), 3, titleStyle));
+ Add(new cMenuEditBoolItem(tr("Display Disk Usage"), tmpConf->GetValueRef("showDiscUsage")));
+ if (tmpConf->GetValue("showDiscUsage")) {
+ Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Size (square, Percent of OSD Width)")), tmpConf->GetValueRef("menuSizeDiskUsage"), 5, 30));
+ Add(new cMenuEditStraItem(cString::sprintf("%s%s", *spacer, tr("Free Disc Display")), tmpConf->GetValueRef("discUsageStyle"), 2, discUsageStyle));
+ Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Adjust Font Size - free")), tmpConf->GetValueRef("fontDiskUsage"), -20, 20));
+ Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Adjust Font Size - percent")), tmpConf->GetValueRef("fontDiskUsagePercent"), -20, 20));
}
- Add(new cMenuEditBoolItem(tr("Display Timers"), &tmpNopacityConfig->showTimers));
- if (tmpNopacityConfig->showTimers) {
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Maximum number of Timers")), &tmpNopacityConfig->numberTimers, 1, 10));
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width of Timers (Percent of OSD Width)")), &tmpNopacityConfig->menuWidthRightItems, 5, 100));
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Channel Logo Width")), &tmpNopacityConfig->timersLogoWidth, 30, 300));
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Channel Logo Height")), &tmpNopacityConfig->timersLogoHeight, 30, 300));
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Adjust Font Size - Header")), &tmpNopacityConfig->fontTimersHead, -20, 20));
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Adjust Font Size - Title")), &tmpNopacityConfig->fontTimers, -20, 20));
+ Add(new cMenuEditStraItem(tr("Display Timers"), tmpConf->GetValueRef("showTimers"), 3, showTimers));
+ if (tmpConf->GetValue("showTimers")) {
+ Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Maximum number of Timers")), tmpConf->GetValueRef("numberTimers"), 1, 10));
+ Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width of Timers (Percent of OSD Width)")), tmpConf->GetValueRef("menuWidthRightItems"), 5, 30));
+ Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width of Channel Logos (Percent of Timer Width)")), tmpConf->GetValueRef("timersLogoWidth"), 20, 98));
+ Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Adjust Font Size - Header")), tmpConf->GetValueRef("fontTimersHead"), -20, 20));
+ Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Adjust Font Size - Title")), tmpConf->GetValueRef("fontTimers"), -20, 20));
}
- Add(new cMenuEditBoolItem(tr("Show Timer Conflicts"), &tmpNopacityConfig->checkTimerConflict));
- Add(new cMenuEditIntItem(tr("Header Logo Width"), &tmpNopacityConfig->menuHeaderLogoWidth, 30, 500));
- Add(new cMenuEditIntItem(tr("Header Logo Height"), &tmpNopacityConfig->menuHeaderLogoHeight, 30, 500));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Items"), &tmpNopacityConfig->fontMenuitemLarge, -20, 20));
-
+ Add(new cMenuEditBoolItem(tr("Show Timer Conflicts"), tmpConf->GetValueRef("checkTimerConflict")));
+ Add(new cMenuEditIntItem(tr("Header Logo Width"), tmpConf->GetValueRef("menuHeaderLogoWidth"), 30, 500));
+ Add(new cMenuEditIntItem(tr("Header Logo Height"), tmpConf->GetValueRef("menuHeaderLogoHeight"), 30, 500));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Items"), tmpConf->GetValueRef("fontMenuitemLarge"), -20, 20));
+
SetCurrent(Get(currentItem));
Display();
}
@@ -309,13 +225,12 @@ void cNopacitySetupMenuDisplayMain::Set(void) {
//-----MenuDisplay Schedules Menu -------------------------------------------------------------------------------------------------------------
cNopacitySetupMenuDisplaySchedules::cNopacitySetupMenuDisplaySchedules(cNopacityConfig* data) : cMenuSetupSubMenu(tr("VDR Menu: Schedules Menu"), data) {
- useSubtitleRerunTexts[0] = tr("never");
- useSubtitleRerunTexts[1] = tr("if exists");
- useSubtitleRerunTexts[2] = tr("always");
scrollSpeed[0] = tr("off");
scrollSpeed[1] = tr("slow");
scrollSpeed[2] = tr("medium");
scrollSpeed[3] = tr("fast");
+ windowMode[0] = tr("window");
+ windowMode[1] = tr("full screen");
Set();
}
@@ -323,34 +238,21 @@ void cNopacitySetupMenuDisplaySchedules::Set(void) {
int currentItem = Current();
Clear();
- Add(new cMenuEditBoolItem(tr("Use narrow menu"), &tmpNopacityConfig->narrowScheduleMenu));
- if (tmpNopacityConfig->narrowScheduleMenu)
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), &tmpNopacityConfig->menuWidthSchedules, 10, 100));
- Add(new cMenuEditIntItem(tr("Channel Logo Width"), &tmpNopacityConfig->menuItemLogoWidth, 30, 200));
- Add(new cMenuEditIntItem(tr("Channel Logo Height"), &tmpNopacityConfig->menuItemLogoHeight, 30, 200));
- Add(new cMenuEditIntItem(tr("EPG Window Fade-In Time in ms (Zero for switching off fading)"), &tmpNopacityConfig->menuEPGWindowFadeTime, 0, 1000));
- Add(new cMenuEditIntItem(tr("EPG Window Display Delay in s"), &tmpNopacityConfig->menuInfoTextDelay, 0, 10));
- Add(new cMenuEditIntItem(tr("EPG Window Scroll Delay in s"), &tmpNopacityConfig->menuInfoScrollDelay, 0, 10));
- Add(new cMenuEditStraItem(tr("EPG Window Text Scrolling Speed"), &tmpNopacityConfig->menuInfoScrollSpeed, 4, scrollSpeed));
- Add(new cMenuEditIntItem(tr("Height of EPG Info Window (Percent of OSD Height)"), &tmpNopacityConfig->menuHeightInfoWindow, 10, 100));
- Add(new cMenuEditBoolItem(tr("Display Reruns in detailed EPG View"), &tmpNopacityConfig->displayRerunsDetailEPGView));
- if (tmpNopacityConfig->displayRerunsDetailEPGView) {
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Number of reruns to display")), &tmpNopacityConfig->numReruns, 1, 10));
- Add(new cMenuEditStraItem(cString::sprintf("%s%s", *spacer, tr("Use Subtitle for reruns")), &tmpNopacityConfig->useSubtitleRerun, 3, useSubtitleRerunTexts));
- }
- Add(new cMenuEditBoolItem(tr("Display additional EPG Pictures in detailed EPG View"), &tmpNopacityConfig->displayAdditionalEPGPictures));
- if (tmpNopacityConfig->displayAdditionalEPGPictures)
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Number of EPG pictures to display")), &tmpNopacityConfig->numAdditionalEPGPictures, 1, 9));
- Add(new cMenuEditIntItem(tr("Detail EPG View Logo Width"), &tmpNopacityConfig->detailViewLogoWidth, 30, 500));
- Add(new cMenuEditIntItem(tr("Detail EPG View Logo Height"), &tmpNopacityConfig->detailViewLogoHeight, 30, 500));
- Add(new cMenuEditIntItem(tr("Detail EPG View EPG Image Width"), &tmpNopacityConfig->epgImageWidth, 30, 500));
- Add(new cMenuEditIntItem(tr("Detail EPG View EPG Image Height"), &tmpNopacityConfig->epgImageHeight, 30, 500));
- Add(new cMenuEditIntItem(tr("Detail EPG View additional EPG Image Width"), &tmpNopacityConfig->epgImageWidthLarge, 100, 800));
- Add(new cMenuEditIntItem(tr("Detail EPG View additional EPG Image Height"), &tmpNopacityConfig->epgImageHeightLarge, 100, 800));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item"), &tmpNopacityConfig->fontMenuitemSchedule, -20, 20));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item Small"), &tmpNopacityConfig->fontMenuitemScheduleSmall, -20, 20));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - EPG Info Window"), &tmpNopacityConfig->fontEPGInfoWindow, -20, 20));
-
+ Add(new cMenuEditBoolItem(tr("Use narrow menu"), tmpConf->GetValueRef("narrowScheduleMenu")));
+ if (tmpConf->GetValue("narrowScheduleMenu"))
+ Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), tmpConf->GetValueRef("menuWidthSchedules"), 10, 97));
+ Add(new cMenuEditIntItem(tr("Number of entires per page"), tmpConf->GetValueRef("numSchedulesMenuItems"), 3, 20));
+ Add(new cMenuEditStraItem(tr("Mode of EPG Window"), tmpConf->GetValueRef("menuSchedulesWindowMode"), 2, windowMode));
+ Add(new cMenuEditIntItem(tr("EPG Window Fade-In Time in ms (Zero for switching off fading)"), tmpConf->GetValueRef("menuEPGWindowFadeTime"), 0, 1000));
+ Add(new cMenuEditIntItem(tr("EPG Window Display Delay in s"), tmpConf->GetValueRef("menuInfoTextDelay"), 0, 10));
+ Add(new cMenuEditIntItem(tr("EPG Window Scroll Delay in s"), tmpConf->GetValueRef("menuInfoScrollDelay"), 0, 10));
+ Add(new cMenuEditStraItem(tr("EPG Window Text Scrolling Speed"), tmpConf->GetValueRef("menuInfoScrollSpeed"), 4, scrollSpeed));
+ Add(new cMenuEditIntItem(tr("Height of EPG Info Window (Percent of OSD Height)"), tmpConf->GetValueRef("menuHeightInfoWindow"), 10, 100));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item"), tmpConf->GetValueRef("fontMenuitemSchedule"), -20, 20));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item Small"), tmpConf->GetValueRef("fontMenuitemScheduleSmall"), -20, 20));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - EPG Info Window"), tmpConf->GetValueRef("fontEPGInfoWindow"), -20, 20));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - EPG Info Window Header"), tmpConf->GetValueRef("fontEPGInfoWindowLarge"), -20, 20));
+
SetCurrent(Get(currentItem));
Display();
}
@@ -358,19 +260,27 @@ void cNopacitySetupMenuDisplaySchedules::Set(void) {
//-----MenuDisplay Channels Menu -------------------------------------------------------------------------------------------------------------
cNopacitySetupMenuDisplayChannels::cNopacitySetupMenuDisplayChannels(cNopacityConfig* data) : cMenuSetupSubMenu(tr("VDR Menu: Channels Menu"), data) {
+ displayModes[0] = tr("Transponder Information");
+ displayModes[1] = tr("Current Schedule");
+ displayModes[2] = tr("Plain Channels");
Set();
}
void cNopacitySetupMenuDisplayChannels::Set(void) {
int currentItem = Current();
Clear();
-
- Add(new cMenuEditBoolItem(tr("Use narrow menu"), &tmpNopacityConfig->narrowChannelMenu));
- if (tmpNopacityConfig->narrowChannelMenu)
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), &tmpNopacityConfig->menuWidthChannels, 10, 100));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item"), &tmpNopacityConfig->fontMenuitemChannel, -20, 20));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item Small"), &tmpNopacityConfig->fontMenuitemChannelSmall, -20, 20));
-
+
+ Add(new cMenuEditBoolItem(tr("Use narrow menu"), tmpConf->GetValueRef("narrowChannelMenu")));
+ if (tmpConf->GetValue("narrowChannelMenu"))
+ Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), tmpConf->GetValueRef("menuWidthChannels"), 10, 97));
+ Add(new cMenuEditStraItem(tr("Menu Items display mode"), tmpConf->GetValueRef("menuChannelDisplayMode"), 3, displayModes));
+ if (tmpConf->GetValue("menuChannelDisplayMode") == 1) {
+ Add(new cMenuEditBoolItem(cString::sprintf("%s%s", *spacer, tr("Display schedules with time info")), tmpConf->GetValueRef("menuChannelDisplayTime")));
+ }
+ Add(new cMenuEditIntItem(tr("Number of EPG Entries in Schedules Info Window"), tmpConf->GetValueRef("numEPGEntriesChannelsMenu"), 1, 100));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item"), tmpConf->GetValueRef("fontMenuitemChannel"), -20, 20));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item Small"), tmpConf->GetValueRef("fontMenuitemChannelSmall"), -20, 20));
+
SetCurrent(Get(currentItem));
Display();
}
@@ -378,19 +288,22 @@ void cNopacitySetupMenuDisplayChannels::Set(void) {
//-----MenuDisplay Timers Menu -------------------------------------------------------------------------------------------------------------
cNopacitySetupMenuDisplayTimers::cNopacitySetupMenuDisplayTimers(cNopacityConfig* data) : cMenuSetupSubMenu(tr("VDR Menu: Timers Menu"), data) {
+ windowMode[0] = tr("window");
+ windowMode[1] = tr("full screen");
Set();
}
void cNopacitySetupMenuDisplayTimers::Set(void) {
int currentItem = Current();
Clear();
-
- Add(new cMenuEditBoolItem(tr("Use narrow menu"), &tmpNopacityConfig->narrowTimerMenu));
- if (tmpNopacityConfig->narrowTimerMenu)
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), &tmpNopacityConfig->menuWidthTimers, 10, 100));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item"), &tmpNopacityConfig->fontMenuitemTimers, -20, 20));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item Small"), &tmpNopacityConfig->fontMenuitemTimersSmall, -20, 20));
-
+
+ Add(new cMenuEditBoolItem(tr("Use narrow menu"), tmpConf->GetValueRef("narrowTimerMenu")));
+ if (tmpConf->GetValue("narrowTimerMenu"))
+ Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), tmpConf->GetValueRef("menuWidthTimers"), 10, 97));
+ Add(new cMenuEditStraItem(tr("Mode of EPG Window"), tmpConf->GetValueRef("menuTimersWindowMode"), 2, windowMode));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item"), tmpConf->GetValueRef("fontMenuitemTimers"), -20, 20));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item Small"), tmpConf->GetValueRef("fontMenuitemTimersSmall"), -20, 20));
+
SetCurrent(Get(currentItem));
Display();
}
@@ -398,22 +311,57 @@ void cNopacitySetupMenuDisplayTimers::Set(void) {
//-----MenuDisplay Recordings Menu -------------------------------------------------------------------------------------------------------------
cNopacitySetupMenuDisplayRecordings::cNopacitySetupMenuDisplayRecordings(cNopacityConfig* data) : cMenuSetupSubMenu(tr("VDR Menu: Recordings Menu"), data) {
+ displayEPGPictures[0] = tr("never");
+ displayEPGPictures[1] = tr("always");
+ displayEPGPictures[2] = tr("only if no tvscraper media available");
+ windowMode[0] = tr("window");
+ windowMode[1] = tr("full screen");
Set();
}
void cNopacitySetupMenuDisplayRecordings::Set(void) {
int currentItem = Current();
Clear();
-
- Add(new cMenuEditBoolItem(tr("Use narrow menu"), &tmpNopacityConfig->narrowRecordingMenu));
- if (tmpNopacityConfig->narrowRecordingMenu)
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), &tmpNopacityConfig->menuWidthRecordings, 10, 100));
- Add(new cMenuEditBoolItem(tr("Display additional EPG Pictures in detailed recording View"), &tmpNopacityConfig->displayAdditionalRecEPGPictures));
- if (tmpNopacityConfig->displayAdditionalRecEPGPictures)
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Number of EPG pictures to display")), &tmpNopacityConfig->numAdditionalRecEPGPictures, 1, 9));
- Add(new cMenuEditIntItem(tr("Folder Icon Size"), &tmpNopacityConfig->menuRecFolderSize, 30, 300));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item"), &tmpNopacityConfig->fontMenuitemRecordings, -20, 20));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item Small"), &tmpNopacityConfig->fontMenuitemRecordingsSmall, -20, 20));
+
+ Add(new cMenuEditBoolItem(tr("Use narrow menu"), tmpConf->GetValueRef("narrowRecordingMenu")));
+ if (tmpConf->GetValue("narrowRecordingMenu"))
+ Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), tmpConf->GetValueRef("menuWidthRecordings"), 10, 97));
+ Add(new cMenuEditIntItem(tr("Number of entires per page"), tmpConf->GetValueRef("numRecordingsMenuItems"), 3, 20));
+ Add(new cMenuEditStraItem(tr("Mode of recording Window"), tmpConf->GetValueRef("menuRecordingsWindowMode"), 2, windowMode));
+ Add(new cMenuEditIntItem(tr("Border around detailed recording view"), tmpConf->GetValueRef("borderDetailedRecordings"), 1, 300));
+ Add(new cMenuEditBoolItem(tr("Use folder poster if available"), tmpConf->GetValueRef("useFolderPoster")));
+ Add(new cMenuEditIntItem(tr("Width of manually set recording poster"), tmpConf->GetValueRef("posterWidth"), 100, 1000));
+ Add(new cMenuEditIntItem(tr("Height of manually set recording poster"), tmpConf->GetValueRef("posterHeight"), 100, 1000));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item"), tmpConf->GetValueRef("fontMenuitemRecordings"), -20, 20));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item Small"), tmpConf->GetValueRef("fontMenuitemRecordingsSmall"), -20, 20));
+
+ SetCurrent(Get(currentItem));
+ Display();
+}
+
+//-----MenuDisplay Detailed EPG & Recordings View -------------------------------------------------------------------------------------------------------------
+
+cNopacitySetupDetailedView::cNopacitySetupDetailedView(cNopacityConfig* data) : cMenuSetupSubMenu(tr("VDR Menu: Detailed EPG & Recordings View"), data) {
+ useSubtitleRerunTexts[0] = tr("never");
+ useSubtitleRerunTexts[1] = tr("if exists");
+ useSubtitleRerunTexts[2] = tr("always");
+ Set();
+}
+
+void cNopacitySetupDetailedView::Set(void) {
+ int currentItem = Current();
+ Clear();
+
+ Add(new cMenuEditIntItem(tr("Border around view"), tmpConf->GetValueRef("borderDetailedEPG"), 1, 300));
+ Add(new cMenuEditIntItem(tr("Scroll Speed with up / down (number of lines)"), tmpConf->GetValueRef("detailedViewScrollStep"), 1, 30));
+ Add(new cMenuEditIntItem(tr("Header Height detailed EPG view (Perc. of OSD Height)"), tmpConf->GetValueRef("headerDetailedEPG"), 10, 50));
+ Add(new cMenuEditIntItem(tr("Header Height detailed recording view (Perc. of OSD Height)"), tmpConf->GetValueRef("headerDetailedRecordings"), 10, 50));
+ Add(new cMenuEditIntItem(tr("Number of reruns to display"), tmpConf->GetValueRef("numReruns"), 1, 10));
+ Add(new cMenuEditStraItem(tr("Use Subtitle for reruns"), tmpConf->GetValueRef("useSubtitleRerun"), 3, useSubtitleRerunTexts));
+ Add(new cMenuEditIntItem(tr("EPG Image Width"), tmpConf->GetValueRef("epgImageWidth"), 30, 500));
+ Add(new cMenuEditIntItem(tr("EPG Image Height"), tmpConf->GetValueRef("epgImageHeight"), 30, 500));
+ Add(new cMenuEditIntItem(tr("Large EPG Image Width"), tmpConf->GetValueRef("epgImageWidthLarge"), 100, 800));
+ Add(new cMenuEditIntItem(tr("Large EPG Image Height"), tmpConf->GetValueRef("epgImageHeightLarge"), 100, 800));
SetCurrent(Get(currentItem));
Display();
@@ -422,9 +370,14 @@ void cNopacitySetupMenuDisplayRecordings::Set(void) {
//----ChannelDisplay--------------------------------------------------------------------------------------------------------------
cNopacitySetupChannelDisplay::cNopacitySetupChannelDisplay(cNopacityConfig* data) : cMenuSetupSubMenu(tr("Channel Switching"), data) {
+ bgStyle[0] = tr("transparent channel logo");
+ bgStyle[1] = tr("full osd width");
logoPos[0] = tr("do not display");
logoPos[1] = tr("left");
logoPos[2] = tr("right");
+ logoVerticalPos[0] = tr("top");
+ logoVerticalPos[1] = tr("middle");
+ logoVerticalPos[2] = tr("bottom");
progressStyleCurrentSchedule[0] = tr("show elapsed time");
progressStyleCurrentSchedule[1] = tr("show remaining time");
Set();
@@ -433,25 +386,37 @@ cNopacitySetupChannelDisplay::cNopacitySetupChannelDisplay(cNopacityConfig* data
void cNopacitySetupChannelDisplay::Set(void) {
int currentItem = Current();
Clear();
-
- Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), &tmpNopacityConfig->channelFadeTime, 0, 1000));
- Add(new cMenuEditIntItem(tr("Height of Channel Display (Percent of OSD Height)"), &tmpNopacityConfig->channelHeight, 15, 100));
- Add(new cMenuEditIntItem(tr("Left & Right Border Width"), &tmpNopacityConfig->channelBorderVertical, 0, 300));
- Add(new cMenuEditIntItem(tr("Bottom Border Height"), &tmpNopacityConfig->channelBorderBottom, 0, 300));
- Add(new cMenuEditStraItem(tr("Channel Logo Position"), &tmpNopacityConfig->logoPosition, 3, logoPos));
- if (tmpNopacityConfig->logoPosition) {
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Channel Logo Width")), &tmpNopacityConfig->logoWidth, 30, 500));
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Channel Logo Height")), &tmpNopacityConfig->logoHeight, 30, 500));
- Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Channel Logo Border")), &tmpNopacityConfig->logoBorder, 0, 200));
+ Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), tmpConf->GetValueRef("channelFadeTime"), 0, 1000));
+ Add(new cMenuEditIntItem(tr("Height of Channel Display (Percent of OSD Height)"), tmpConf->GetValueRef("channelHeight"), 15, 80));
+ Add(new cMenuEditIntItem(tr("Left & Right Border Width"), tmpConf->GetValueRef("channelBorderVertical"), 0, 300));
+ Add(new cMenuEditIntItem(tr("Bottom Border Height"), tmpConf->GetValueRef("channelBorderBottom"), 0, 300));
+ Add(new cMenuEditIntItem(tr("Background Transparency in Percent"), tmpConf->GetValueRef("channelBackgroundTransparency"), 0, 80));
+ if (config.GetValue("displayType") != dtGraphical) {
+ Add(new cMenuEditStraItem(tr("Background Style"), tmpConf->GetValueRef("backgroundStyle"), 2, bgStyle));
+ Add(new cMenuEditBoolItem(tr("Rounded Corners"), tmpConf->GetValueRef("roundedCornersChannel")));
+ }
+ Add(new cMenuEditStraItem(tr("Vertical Channel Logo Alignment"), tmpConf->GetValueRef("logoVerticalAlignment"), 3, logoVerticalPos));
+ Add(new cMenuEditStraItem(tr("Channel Logo Position"), tmpConf->GetValueRef("logoPosition"), 3, logoPos));
+ if (tmpConf->GetValue("logoPosition")) {
+ Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Channel Logo original Width")), tmpConf->GetValueRef("logoWidthOriginal"), 30, 500));
+ Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Channel Logo original Height")), tmpConf->GetValueRef("logoHeightOriginal"), 30, 500));
+ Add(new cMenuEditBoolItem(cString::sprintf("%s%s", *spacer, tr("Use Channel Logo background")), tmpConf->GetValueRef("channelUseLogoBackground")));
+ }
+ Add(new cMenuEditStraItem(tr("Kind of time display for current schedule"), tmpConf->GetValueRef("progressCurrentSchedule"), 2, progressStyleCurrentSchedule));
+ Add(new cMenuEditBoolItem(tr("Display Signal Strength & Quality"), tmpConf->GetValueRef("displaySignalStrength")));
+ Add(new cMenuEditBoolItem(tr("Display Channel Source & Rec. Info"), tmpConf->GetValueRef("displaySourceInfo")));
+ Add(new cMenuEditBoolItem(tr("Display Poster or Fanart from TVScraper"), tmpConf->GetValueRef("displayPoster")));
+ if (tmpConf->GetValue("displayPoster")) {
+ Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Border in Pixel")), tmpConf->GetValueRef("channelPosterBorder"), 0, 200));
}
- Add(new cMenuEditStraItem(tr("Kind of time display for current schedule"), &tmpNopacityConfig->progressCurrentSchedule, 2, progressStyleCurrentSchedule));
- Add(new cMenuEditBoolItem(tr("Display Signal Strength & Quality"), &tmpNopacityConfig->displaySignalStrength));
- Add(new cMenuEditIntItem(tr("Screen Resolution Icon Size"), &tmpNopacityConfig->resolutionIconSize, 30, 200));
- Add(new cMenuEditIntItem(tr("Status Icons Size"), &tmpNopacityConfig->statusIconSize, 30, 150));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Header"), &tmpNopacityConfig->fontChannelHeaderSize, -20, 20));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Date"), &tmpNopacityConfig->fontChannelDateSize, -20, 20));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - EPG Text"), &tmpNopacityConfig->fontEPGSize, -20, 20));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - EPG Infotext"), &tmpNopacityConfig->fontEPGSmallSize, -20, 20));
+ Add(new cMenuEditBoolItem(tr("Display previous and next Channel Group"), tmpConf->GetValueRef("displayPrevNextChannelGroup")));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Header"), tmpConf->GetValueRef("fontChannelHeaderSize"), -20, 20));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Date"), tmpConf->GetValueRef("fontChannelDateSize"), -20, 20));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - EPG Text"), tmpConf->GetValueRef("fontEPGSize"), -20, 20));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - EPG Infotext"), tmpConf->GetValueRef("fontEPGSmallSize"), -20, 20));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Channel Source Info"), tmpConf->GetValueRef("fontChannelSourceInfoSize"), -20, 20));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Channel Group"), tmpConf->GetValueRef("fontChannelGroupSize"), -20, 20));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Next/Prev Channel Group"), tmpConf->GetValueRef("fontChannelGroupSmallSize"), -20, 20));
SetCurrent(Get(currentItem));
Display();
}
@@ -466,12 +431,12 @@ void cNopacitySetupReplayDisplay::Set(void) {
int currentItem = Current();
Clear();
- Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), &tmpNopacityConfig->replayFadeTime, 0, 1000));
- Add(new cMenuEditIntItem(tr("Height of Replay Display (Percent of OSD Height)"), &tmpNopacityConfig->replayHeight, 15, 100));
- Add(new cMenuEditIntItem(tr("Left & Right Border Width"), &tmpNopacityConfig->replayBorderVertical, 0, 300));
- Add(new cMenuEditIntItem(tr("Bottom Border Height"), &tmpNopacityConfig->replayBorderBottom, 0, 300));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Header"), &tmpNopacityConfig->fontReplayHeader, -20, 20));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Text"), &tmpNopacityConfig->fontReplay, -20, 20));
+ Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), tmpConf->GetValueRef("replayFadeTime"), 0, 1000));
+ Add(new cMenuEditIntItem(tr("Height of Replay Display (Percent of OSD Height)"), tmpConf->GetValueRef("replayHeight"), 15, 80));
+ Add(new cMenuEditIntItem(tr("Left & Right Border Width"), tmpConf->GetValueRef("replayBorderVertical"), 0, 300));
+ Add(new cMenuEditIntItem(tr("Bottom Border Height"), tmpConf->GetValueRef("replayBorderBottom"), 0, 300));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Header"), tmpConf->GetValueRef("fontReplayHeader"), -20, 20));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Text"), tmpConf->GetValueRef("fontReplay"), -20, 20));
SetCurrent(Get(currentItem));
Display();
@@ -486,14 +451,14 @@ cNopacitySetupTrackDisplay::cNopacitySetupTrackDisplay(cNopacityConfig* data) :
void cNopacitySetupTrackDisplay::Set(void) {
int currentItem = Current();
Clear();
- Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), &tmpNopacityConfig->tracksFadeTime, 0, 1000));
- Add(new cMenuEditIntItem(tr("Width of Tracks Display (Percent of OSD Width)"), &tmpNopacityConfig->tracksWidth, 10, 100));
- Add(new cMenuEditIntItem(tr("Height of Track Items (in pixels)"), &tmpNopacityConfig->tracksItemHeight, 30, 200));
- Add(new cMenuEditIntItem(tr("Position (0: bot. center, 1: bot. left, ... , 7: bot. right)"), &tmpNopacityConfig->tracksPosition, 0, 7));
- Add(new cMenuEditIntItem(tr("Border Top / Bottom"), &tmpNopacityConfig->tracksBorderHorizontal, 0, 100));
- Add(new cMenuEditIntItem(tr("Border Left / Right"), &tmpNopacityConfig->tracksBorderVertical, 0, 100));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Header"), &tmpNopacityConfig->fontTracksHeader, -20, 20));
- Add(new cMenuEditIntItem(tr("Adjust Font Size - Buttons"), &tmpNopacityConfig->fontTracks, -20, 20));
+ Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), tmpConf->GetValueRef("tracksFadeTime"), 0, 1000));
+ Add(new cMenuEditIntItem(tr("Width of Tracks Display (Percent of OSD Width)"), tmpConf->GetValueRef("tracksWidth"), 10, 100));
+ Add(new cMenuEditIntItem(tr("Height of Track Items (in pixels)"), tmpConf->GetValueRef("tracksItemHeight"), 30, 200));
+ Add(new cMenuEditIntItem(tr("Position (0: bot. center, 1: bot. left, ... , 7: bot. right)"), tmpConf->GetValueRef("tracksPosition"), 0, 7));
+ Add(new cMenuEditIntItem(tr("Border Left / Right"), tmpConf->GetValueRef("tracksBorderHorizontal"), 0, 100));
+ Add(new cMenuEditIntItem(tr("Border Top / Bottom"), tmpConf->GetValueRef("tracksBorderVertical"), 0, 100));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Header"), tmpConf->GetValueRef("fontTracksHeader"), -20, 20));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size - Buttons"), tmpConf->GetValueRef("fontTracks"), -20, 20));
SetCurrent(Get(currentItem));
Display();
@@ -509,11 +474,11 @@ void cNopacitySetupMessageDisplay::Set(void) {
int currentItem = Current();
Clear();
- Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), &tmpNopacityConfig->messageFadeTime, 0, 1000));
- Add(new cMenuEditIntItem(tr("Width of Message Display (Percent of OSD Height)"), &tmpNopacityConfig->messageWidth, 30, 100));
- Add(new cMenuEditIntItem(tr("Height of Message Display (Percent of OSD Height)"), &tmpNopacityConfig->messageHeight, 5, 100));
- Add(new cMenuEditIntItem(tr("Bottom Border Height"), &tmpNopacityConfig->messageBorderBottom, 0, 1000));
- Add(new cMenuEditIntItem(tr("Adjust Font Size"), &tmpNopacityConfig->fontMessage, -30, 30));
+ Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), tmpConf->GetValueRef("messageFadeTime"), 0, 1000));
+ Add(new cMenuEditIntItem(tr("Width of Message Display (Percent of OSD Height)"), tmpConf->GetValueRef("messageWidth"), 30, 100));
+ Add(new cMenuEditIntItem(tr("Height of Message Display (Percent of OSD Height)"), tmpConf->GetValueRef("messageHeight"), 5, 100));
+ Add(new cMenuEditIntItem(tr("Bottom Border Height"), tmpConf->GetValueRef("messageBorderBottom"), 0, 1000));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size"), tmpConf->GetValueRef("fontMessage"), -30, 30));
SetCurrent(Get(currentItem));
Display();
@@ -528,13 +493,41 @@ cNopacitySetupVolumeDisplay::cNopacitySetupVolumeDisplay(cNopacityConfig* data)
void cNopacitySetupVolumeDisplay::Set(void) {
int currentItem = Current();
Clear();
-
- Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), &tmpNopacityConfig->volumeFadeTime, 0, 1000));
- Add(new cMenuEditIntItem(tr("Width of Volume Display (Percent of OSD Height)"), &tmpNopacityConfig->volumeWidth, 10, 100));
- Add(new cMenuEditIntItem(tr("Height of Volume Display (Percent of OSD Height)"), &tmpNopacityConfig->volumeHeight, 5, 100));
- Add(new cMenuEditIntItem(tr("Bottom Border Height"), &tmpNopacityConfig->volumeBorderBottom, 0, 1000));
- Add(new cMenuEditIntItem(tr("Adjust Font Size"), &tmpNopacityConfig->fontVolume, -30, 30));
+ Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), tmpConf->GetValueRef("volumeFadeTime"), 0, 1000));
+ Add(new cMenuEditIntItem(tr("Width of Volume Display (Percent of OSD Height)"), tmpConf->GetValueRef("volumeWidth"), 10, 100));
+ Add(new cMenuEditIntItem(tr("Height of Volume Display (Percent of OSD Height)"), tmpConf->GetValueRef("volumeHeight"), 5, 100));
+ Add(new cMenuEditIntItem(tr("Bottom Border Height"), tmpConf->GetValueRef("volumeBorderBottom"), 0, 1000));
+ Add(new cMenuEditIntItem(tr("Adjust Font Size"), tmpConf->GetValueRef("fontVolume"), -30, 30));
SetCurrent(Get(currentItem));
Display();
}
+
+//-----Image Caching-------------------------------------------------------------------------------------------------------------
+
+cNopacitySetupCaching::cNopacitySetupCaching(cNopacityConfig* data, cImageCache *imgCache) : cMenuSetupSubMenu(tr("Image Caching"), data) {
+ this->imgCache = imgCache;
+ Set();
+}
+
+void cNopacitySetupCaching::Set(void) {
+ int currentItem = Current();
+ Clear();
+
+ Add(new cMenuEditBoolItem(tr("Limit Logo Cache"), tmpConf->GetValueRef("limitLogoCache")));
+ if (tmpConf->GetValue("limitLogoCache")) {
+ Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Maximal number of logos to cache")), tmpConf->GetValueRef("numLogosMax"), 1, 9999));
+ }
+ Add(new cMenuEditIntItem(tr("Number of logos to cache at start"), tmpConf->GetValueRef("numLogosInitial"), 0, 9999));
+
+ Add(InfoItem(tr("Cache Sizes"), ""));
+ Add(InfoItem(tr("Menu Icon cache"), (imgCache->GetCacheSize(ctMenuIcon)).c_str()));
+ Add(InfoItem(tr("Skin Icon image cache"), (imgCache->GetCacheSize(ctSkinIcon)).c_str()));
+ Add(InfoItem(tr("Logo cache"), (imgCache->GetCacheSize(ctLogo)).c_str()));
+ Add(InfoItem(tr("Menu Item Logo cache"), (imgCache->GetCacheSize(ctLogoMenuItem)).c_str()));
+ Add(InfoItem(tr("Timer Logo cache"), (imgCache->GetCacheSize(ctLogoTimer)).c_str()));
+ Add(InfoItem(tr("Background Images cache"), (imgCache->GetCacheSize(ctSkinElement)).c_str()));
+
+ SetCurrent(Get(currentItem));
+ Display();
+}
\ No newline at end of file
diff --git a/setup.h b/setup.h
index 051fa66..e4da4e1 100644
--- a/setup.h
+++ b/setup.h
@@ -1,12 +1,16 @@
#ifndef __NOPACITY_SETUP_H
#define __NOPACITY_SETUP_H
+#include "config.h"
+#include "imagecache.h"
+
class cNopacitySetup : public cMenuSetupPage {
public:
- cNopacitySetup(void);
- virtual ~cNopacitySetup();
+ cNopacitySetup(cImageCache *imgCache);
+ virtual ~cNopacitySetup();
private:
- cNopacityConfig tmpNopacityConfig;
+ cNopacityConfig tmpConf;
+ cImageCache *imgCache;
cStringList fontNames;
void Setup(void);
protected:
@@ -18,7 +22,7 @@ class cNopacitySetup : public cMenuSetupPage {
class cMenuSetupSubMenu : public cOsdMenu {
protected:
- cNopacityConfig *tmpNopacityConfig;
+ cNopacityConfig *tmpConf;
cString spacer;
virtual eOSState ProcessKey(eKeys Key);
virtual void Set(void) = 0;
@@ -30,7 +34,9 @@ class cMenuSetupSubMenu : public cOsdMenu {
class cNopacitySetupMenuDisplay : public cMenuSetupSubMenu {
protected:
const char *adjustLeft[2];
+ const char *scrollMode[2];
const char *scrollSpeed[4];
+ const char *scalePic[3];
void Set(void);
public:
cNopacitySetupMenuDisplay(cNopacityConfig *data);
@@ -39,6 +45,8 @@ class cNopacitySetupMenuDisplay : public cMenuSetupSubMenu {
class cNopacitySetupMenuDisplayMain : public cMenuSetupSubMenu {
protected:
const char *titleStyle[3];
+ const char *discUsageStyle[2];
+ const char *showTimers[3];
void Set(void);
public:
cNopacitySetupMenuDisplayMain(cNopacityConfig *data);
@@ -46,8 +54,8 @@ class cNopacitySetupMenuDisplayMain : public cMenuSetupSubMenu {
class cNopacitySetupMenuDisplaySchedules : public cMenuSetupSubMenu {
protected:
- const char *useSubtitleRerunTexts[3];
const char *scrollSpeed[4];
+ const char *windowMode[2];
void Set(void);
public:
cNopacitySetupMenuDisplaySchedules(cNopacityConfig *data);
@@ -55,6 +63,7 @@ class cNopacitySetupMenuDisplaySchedules : public cMenuSetupSubMenu {
class cNopacitySetupMenuDisplayChannels : public cMenuSetupSubMenu {
protected:
+ const char *displayModes[3];
void Set(void);
public:
cNopacitySetupMenuDisplayChannels(cNopacityConfig *data);
@@ -62,6 +71,7 @@ class cNopacitySetupMenuDisplayChannels : public cMenuSetupSubMenu {
class cNopacitySetupMenuDisplayTimers : public cMenuSetupSubMenu {
protected:
+ const char *windowMode[2];
void Set(void);
public:
cNopacitySetupMenuDisplayTimers(cNopacityConfig *data);
@@ -69,15 +79,27 @@ class cNopacitySetupMenuDisplayTimers : public cMenuSetupSubMenu {
class cNopacitySetupMenuDisplayRecordings : public cMenuSetupSubMenu {
protected:
+ const char *displayEPGPictures[3];
+ const char *windowMode[2];
void Set(void);
public:
cNopacitySetupMenuDisplayRecordings(cNopacityConfig *data);
};
+class cNopacitySetupDetailedView : public cMenuSetupSubMenu {
+ protected:
+ const char *useSubtitleRerunTexts[3];
+ void Set(void);
+ public:
+ cNopacitySetupDetailedView(cNopacityConfig *data);
+};
+
class cNopacitySetupChannelDisplay : public cMenuSetupSubMenu {
protected:
const char *logoPos[3];
+ const char *logoVerticalPos[3];
const char *progressStyleCurrentSchedule[2];
+ const char *bgStyle[2];
void Set(void);
public:
cNopacitySetupChannelDisplay(cNopacityConfig *data);
@@ -110,4 +132,12 @@ class cNopacitySetupVolumeDisplay : public cMenuSetupSubMenu {
public:
cNopacitySetupVolumeDisplay(cNopacityConfig *data);
};
+
+class cNopacitySetupCaching : public cMenuSetupSubMenu {
+ protected:
+ cImageCache *imgCache;
+ void Set(void);
+ public:
+ cNopacitySetupCaching(cNopacityConfig *data, cImageCache *imgCache);
+};
#endif //__NOPACITY_SETUP_H
\ No newline at end of file
diff --git a/skinnopacity.c b/skinnopacity.c
index de87064..9ed34af 100644
--- a/skinnopacity.c
+++ b/skinnopacity.c
@@ -8,19 +8,25 @@
#include <getopt.h>
#include <vdr/plugin.h>
-#include "nopacity.c"
+#define DEFINE_CONFIG 1
+#include "config.h"
+#include "nopacity.h"
+#include "setup.h"
+
#if defined(APIVERSNUM) && APIVERSNUM < 10734
#error "VDR-1.7.34 API version or greater is required!"
#endif
-static const char *VERSION = "0.1.0";
+static const char *VERSION = "1.1.3";
static const char *DESCRIPTION = "'nOpacity' Skin";
static const char *MAINMENUENTRY = "nOpacity";
class cPluginNopacity : public cPlugin {
private:
+ cNopacity *nopacity;
+ cImageCache *imgCache;
public:
cPluginNopacity(void);
virtual ~cPluginNopacity();
@@ -46,6 +52,7 @@ public:
cPluginNopacity::cPluginNopacity(void)
{
+ nopacity = NULL;
}
cPluginNopacity::~cPluginNopacity()
@@ -54,14 +61,13 @@ cPluginNopacity::~cPluginNopacity()
const char *cPluginNopacity::CommandLineHelp(void)
{
- return
+ return
" -e <EPGIMAGESPATH>, --epgimages=<IMAGESPATH> Set directory where epgimages are stored\n"
" -i <ICONSPATH>, --iconpath=<ICONSPATH> Set directory where Menu Icons are stored\n"
" -l <LOGOPATH>, --logopath=<LOGOPATH> Set directory where Channel Logos are stored.\n";
}
-bool cPluginNopacity::ProcessArgs(int argc, char *argv[])
-{
+bool cPluginNopacity::ProcessArgs(int argc, char *argv[]) {
// Implement command line argument processing here if applicable.
static const struct option long_options[] = {
{ "epgimages", required_argument, NULL, 'e' },
@@ -71,95 +77,82 @@ bool cPluginNopacity::ProcessArgs(int argc, char *argv[])
};
int c;
- cString *path = NULL;
while ((c = getopt_long(argc, argv, "e:l:i:", long_options, NULL)) != -1) {
switch (c) {
case 'l':
- path = new cString(optarg);
- config.SetLogoPath(*path);
+ config.SetLogoPath(cString(optarg));
break;
case 'e':
- path = new cString(optarg);
- config.SetEpgImagePath(*path);
+ config.SetEpgImagePath(cString(optarg));
break;
case 'i':
- path = new cString(optarg);
- config.SetIconPath(*path);
+ config.SetIconPath(cString(optarg));
break;
default:
return false;
}
- if (path)
- delete path;
}
return true;
}
-bool cPluginNopacity::Initialize(void)
-{
+bool cPluginNopacity::Initialize(void) {
return true;
}
-bool cPluginNopacity::Start(void)
-{
+bool cPluginNopacity::Start(void) {
if (!cOsdProvider::SupportsTrueColor()) {
esyslog("nopacity: No TrueColor OSD found! Aborting!");
return false;
} else
dsyslog("nopacity: TrueColor OSD found");
- return new cNopacity;
+
+ imgCache = new cImageCache();
+ nopacity = new cNopacity(imgCache);
+ return nopacity;
}
-void cPluginNopacity::Stop(void)
-{
+void cPluginNopacity::Stop(void) {
+ delete imgCache;
+ delete geoManager;
+ delete fontManager;
}
-void cPluginNopacity::Housekeeping(void)
-{
+void cPluginNopacity::Housekeeping(void) {
}
-void cPluginNopacity::MainThreadHook(void)
-{
+void cPluginNopacity::MainThreadHook(void) {
}
-cString cPluginNopacity::Active(void)
-{
+cString cPluginNopacity::Active(void) {
return NULL;
}
-time_t cPluginNopacity::WakeupTime(void)
-{
+time_t cPluginNopacity::WakeupTime(void) {
return 0;
}
-cOsdObject *cPluginNopacity::MainMenuAction(void)
-{
+cOsdObject *cPluginNopacity::MainMenuAction(void) {
return NULL;
}
-cMenuSetupPage *cPluginNopacity::SetupMenu(void)
-{
- return new cNopacitySetup();
+cMenuSetupPage *cPluginNopacity::SetupMenu(void) {
+ return new cNopacitySetup(imgCache);
}
-bool cPluginNopacity::SetupParse(const char *Name, const char *Value)
-{
+bool cPluginNopacity::SetupParse(const char *Name, const char *Value) {
return config.SetupParse(Name, Value);
}
-bool cPluginNopacity::Service(const char *Id, void *Data)
-{
+bool cPluginNopacity::Service(const char *Id, void *Data) {
return false;
}
-const char **cPluginNopacity::SVDRPHelpPages(void)
-{
- return NULL;
+const char **cPluginNopacity::SVDRPHelpPages(void) {
+ return NULL;
}
-cString cPluginNopacity::SVDRPCommand(const char *Command, const char *Option, int &ReplyCode)
-{
- return NULL;
+cString cPluginNopacity::SVDRPCommand(const char *Command, const char *Option, int &ReplyCode) {
+ return NULL;
}
VDRPLUGINCREATOR(cPluginNopacity); // Don't touch this!
diff --git a/textwindow.c b/textwindow.c
index 26e4134..efe5dcd 100644
--- a/textwindow.c
+++ b/textwindow.c
@@ -1,10 +1,38 @@
#include "textwindow.h"
+#include "config.h"
+#include "imagecache.h"
+#include "imageloader.h"
+#include "helpers.h"
+#include <sstream>
-cNopacityTextWindow::cNopacityTextWindow(cOsd *osd, cFont *font) {
+cNopacityTextWindow::cNopacityTextWindow(cOsd *osd, cFont *font, cRect *vidWin) {
this->osd = osd;
this->font = font;
+ this->fontHeader = NULL;
+ this->vidWin = vidWin;
pixmapBackground = NULL;
pixmap = NULL;
+ scaledWindow = false;
+ posterWidth = 0;
+ posterHeight = 0;
+ hasManualPoster = false;
+ manualPosterPath = "";
+ hasPoster = false;
+}
+
+cNopacityTextWindow::cNopacityTextWindow(cOsd *osd, cFont *font, cFont *fontHeader) {
+ this->osd = osd;
+ this->font = font;
+ this->fontHeader = fontHeader;
+ this->vidWin = NULL;
+ pixmapBackground = NULL;
+ pixmap = NULL;
+ scaledWindow = false;
+ posterWidth = 0;
+ posterHeight = 0;
+ hasManualPoster = false;
+ manualPosterPath = "";
+ hasPoster = false;
}
cNopacityTextWindow::~cNopacityTextWindow(void) {
@@ -19,40 +47,348 @@ cNopacityTextWindow::~cNopacityTextWindow(void) {
osd->DestroyPixmap(pixmap);
pixmap = NULL;
}
+ if ((config.GetValue("scalePicture") == 2) && scaledWindow) {
+ cRect vidWinNew = cDevice::PrimaryDevice()->CanScaleVideo(oldVidWin);
+ if (vidWinNew != cRect::Null) {
+ vidWin->SetX(vidWinNew.X());
+ vidWin->SetY(vidWinNew.Y());
+ vidWin->SetWidth(vidWinNew.Width());
+ vidWin->SetHeight(vidWinNew.Height());
+ }
+ }
}
-bool cNopacityTextWindow::CreatePixmap(int border) {
+bool cNopacityTextWindow::SetManualPoster(const cRecording *recording, bool fullscreen) {
+ cString posterFound;
+ cImageLoader imgLoader;
+ hasManualPoster = imgLoader.SearchRecordingPoster(recording->FileName(), posterFound);
+ if (hasManualPoster) {
+ manualPosterPath = posterFound;
+ int posterWidthOrig = config.GetValue("posterWidth");
+ int posterHeightOrig = config.GetValue("posterHeight");
+ if (!fullscreen) {
+ posterHeight = geometry->Height() - 5;
+ posterWidth = posterWidthOrig * ((double)posterHeight / (double)posterHeightOrig);
+ } else {
+ posterWidth = geometry->Width() / 4;
+ posterHeight = posterHeightOrig * ((double)posterWidth / (double)posterWidthOrig);
+ }
+ return true;
+ }
+ return false;
+}
+
+void cNopacityTextWindow::SetPoster(const cEvent *event, const cRecording *recording, bool fullscreen) {
+ if (!event && !recording)
+ return;
+ static cPlugin *pScraper = GetScraperPlugin();
+ if (pScraper) {
+ posterScraper2Vdr.event = event;
+ posterScraper2Vdr.recording = recording;
+ if (pScraper->Service("GetPoster", &posterScraper2Vdr)) {
+ hasPoster = true;
+ int posterWidthOrig = posterScraper2Vdr.poster.width;
+ int posterHeightOrig = posterScraper2Vdr.poster.height;
+ if (!fullscreen) {
+ posterHeight = geometry->Height() - 5;
+ posterWidth = posterWidthOrig * ((double)posterHeight / (double)posterHeightOrig);
+ } else {
+ posterWidth = geometry->Width() / 4;
+ posterHeight = posterHeightOrig * ((double)posterWidth / (double)posterWidthOrig);
+ }
+ } else {
+ hasPoster = false;
+ posterHeight = 0;
+ posterWidth = 0;
+ }
+ }
+}
+
+bool cNopacityTextWindow::SetTextScroller(int border, int left) {
int lineHeight = font->Height();
bool scrolling = false;
- twText.Set(text, font, geometry->Width() - 2*border);
- int pixmapTotalHeight = lineHeight * (twText.Lines()+1);
- int drawportHeight = geometry->Height();
- if (pixmapTotalHeight > drawportHeight) {
- drawportHeight = pixmapTotalHeight;
- scrolling = true;
+ drawportHeight = geometry->Height();
+ if (!(hasPoster || hasManualPoster)) {
+ drawTextTall = false;
+ drawTextFull = true;
+ twTextTall.Set("", font, 5);
+ twTextFull.Set(*text, font, geometry->Width() - 2*border);
+ int pixmapTotalHeight = lineHeight * (twTextFull.Lines()+1);
+ if ((pixmapTotalHeight - (lineHeight/2)) > drawportHeight) {
+ drawportHeight = pixmapTotalHeight;
+ scrolling = true;
+ }
+ } else {
+ cTextWrapper test;
+ int widthTall = geometry->Width() - 2*border - left;
+ test.Set(*text, font, widthTall);
+ int linesTotal = test.Lines();
+ int textHeight = linesTotal * lineHeight;
+ if (textHeight > posterHeight) {
+ drawTextTall = true;
+ drawTextFull = true;
+ int lineSplit = posterHeight / lineHeight + 1;
+ std::stringstream textTall;
+ std::stringstream textFull;
+ for (int line = 0; line < linesTotal; line++) {
+ bool lineWrap = false;
+ if (font->Width(test.GetLine(line)) < (widthTall - 100))
+ lineWrap = true;
+ if (line < lineSplit) {
+ textTall << test.GetLine(line);
+ if (lineWrap)
+ textTall << "\n";
+ else
+ textTall << " ";
+ } else {
+ textFull << test.GetLine(line);
+ if (lineWrap)
+ textFull << "\n";
+ else
+ textFull << " ";
+ }
+ }
+ twTextTall.Set(textTall.str().c_str(), font, widthTall);
+ twTextFull.Set(textFull.str().c_str(), font, geometry->Width() - 2*border);
+ scrolling = true;
+ drawportHeight = lineHeight * (twTextTall.Lines() + twTextFull.Lines() + 1);
+ } else {
+ scrolling = false;
+ drawTextTall = true;
+ drawTextFull = false;
+ twTextTall.Set(*text, font, geometry->Width() - 2*border - left);
+ twTextFull.Set("", font, 5);
+ }
}
+ return scrolling;
+}
+
+void cNopacityTextWindow::CreatePixmap(void) {
cPixmap::Lock();
- pixmapBackground = osd->CreatePixmap(4, cRect(geometry->X(), geometry->Y(), geometry->Width(), geometry->Height()));
+ pixmapBackground = osd->CreatePixmap(4, cRect(geometry->X()-1, geometry->Y()-1, geometry->Width()+2, geometry->Height()+2));
pixmap = osd->CreatePixmap(5, cRect(geometry->X(), geometry->Y(), geometry->Width(), geometry->Height()),
cRect(0, 0, geometry->Width(), drawportHeight));
- pixmapBackground->SetAlpha(0);
- pixmapBackground->Fill(clrBlack);
- pixmap->SetAlpha(0);
- pixmap->Fill(Theme.Color(clrMenuBorder));
- pixmap->DrawRectangle(cRect(1, 1, geometry->Width()-2, drawportHeight-2), Theme.Color(clrMenuBack));
+ pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+ pixmapBackground->DrawRectangle(cRect(1, 1, geometry->Width(), geometry->Height()), clrBlack);
+ pixmap->Fill(Theme.Color(clrMenuBack));
+ if (config.GetValue("menuEPGWindowFadeTime")) {
+ pixmap->SetAlpha(0);
+ pixmapBackground->SetAlpha(0);
+ }
cPixmap::Unlock();
- return scrolling;
}
-void cNopacityTextWindow::DrawText(int border) {
+void cNopacityTextWindow::CreatePixmapFullScreen(void) {
+ pixmapBackground = osd->CreatePixmap(4, cRect(geometry->X()-1, geometry->Y()-1, geometry->Width()+2, geometry->Height()+2));
+ pixmap = osd->CreatePixmap(5, cRect(geometry->X(), geometry->Y(), geometry->Width(), geometry->Height()));
+ pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+ pixmapBackground->DrawRectangle(cRect(1, 1, geometry->Width(), geometry->Height()), Theme.Color(clrMenuTextWindow));
+ pixmap->Fill(clrTransparent);
+}
+
+void cNopacityTextWindow::DrawText(int border, int left) {
int lineHeight = font->Height();
int currentLineHeight = lineHeight/2;
+ tColor clrFontBack = (config.GetValue("displayType") != dtFlat)?(clrTransparent):(Theme.Color(clrMenuBack));
cPixmap::Lock();
- for (int i=0; (i < twText.Lines()) && Running(); i++) {
- pixmap->DrawText(cPoint(border, currentLineHeight), twText.GetLine(i), Theme.Color(clrMenuFontButton), clrTransparent, font);
- currentLineHeight += lineHeight;
+ if (drawTextTall) {
+ for (int i=0; (i < twTextTall.Lines()) && Running(); i++) {
+ pixmap->DrawText(cPoint(border + left, currentLineHeight), twTextTall.GetLine(i), Theme.Color(clrMenuFontDetailViewText), clrFontBack, font);
+ currentLineHeight += lineHeight;
+ }
+ }
+ if (drawTextFull) {
+ for (int i=0; (i < twTextFull.Lines()) && Running(); i++) {
+ pixmap->DrawText(cPoint(border, currentLineHeight), twTextFull.GetLine(i), Theme.Color(clrMenuFontDetailViewText), clrFontBack, font);
+ currentLineHeight += lineHeight;
+ }
+ }
+ cPixmap::Unlock();
+}
+
+void cNopacityTextWindow::SetEvent(const cEvent *event) {
+ if (!event)
+ return;
+ CreatePixmapFullScreen();
+ int border = config.GetValue("borderDetailedEPG");
+ int width = geometry->Width();
+ int height = geometry->Height();
+ int widthTextHeader = width - 2 * border;
+ int widthText = widthTextHeader;
+ int y = border;
+ cImageLoader imgLoader;
+ bool epgImageFound = false;
+ if (hasPoster) {
+ int posterX = width - posterWidth - border;
+ if (imgLoader.LoadPoster(posterScraper2Vdr.poster.path.c_str(), posterWidth, posterHeight)) {
+ pixmap->DrawImage(cPoint(posterX, border), imgLoader.GetImage());
+ widthTextHeader -= posterWidth + border;
+ }
+ } else if (imgLoader.LoadEPGImage(event->EventID())) {
+ epgImageFound = true;
+ pixmap->DrawImage(cPoint(width - config.GetValue("epgImageWidth") - border, y), imgLoader.GetImage());
+ widthTextHeader -= config.GetValue("epgImageWidth") + border;
+ }
+ //Title
+ y = DrawTextWrapper(event->Title(), widthTextHeader, y, border, fontHeader, Theme.Color(clrMenuFontDetailViewHeaderTitle), height);
+ //Short Text
+ y = DrawTextWrapper(event->ShortText(), widthTextHeader, y, border, font, Theme.Color(clrMenuFontDetailViewHeader), height);
+
+ y += fontHeader->Height();
+ //Description
+ if (hasPoster && (y < (border + posterHeight))) {
+ int heightNarrow = border + posterHeight - y;
+ DrawTextWrapperFloat(event->Description(),
+ widthTextHeader, widthText, y, heightNarrow,
+ border, font, Theme.Color(clrMenuFontDetailViewText), height);
+ } else if (epgImageFound && (y < (border + config.GetValue("epgImageHeight")))) {
+ y = border + config.GetValue("epgImageHeight");
+ DrawTextWrapper(event->Description(), widthText, y, border, font, Theme.Color(clrMenuFontDetailViewText), height);
+ } else {
+ DrawTextWrapper(event->Description(), widthText, y, border, font, Theme.Color(clrMenuFontDetailViewText), height);
+ }
+}
+
+void cNopacityTextWindow::SetRecording(const cRecording *recording) {
+ if (!recording)
+ return;
+ CreatePixmapFullScreen();
+ int border = config.GetValue("borderDetailedRecordings");
+ int width = geometry->Width();
+ int height = geometry->Height();
+ int widthTextHeader = width - 2 * border;
+ int widthText = widthTextHeader;
+ int y = border;
+ //Image
+ cImageLoader imgLoader;
+ bool recImageFound = false;
+ if (hasManualPoster) {
+ if (imgLoader.LoadPoster(*manualPosterPath, posterWidth, posterHeight)) {
+ int posterX = width - posterWidth - border;
+ pixmap->DrawImage(cPoint(posterX, border), imgLoader.GetImage());
+ widthTextHeader -= posterWidth + border;
+ }
+ } else if (hasPoster) {
+ int posterX = width - posterWidth - border;
+ if (imgLoader.LoadPoster(posterScraper2Vdr.poster.path.c_str(), posterWidth, posterHeight)) {
+ pixmap->DrawImage(cPoint(posterX, border), imgLoader.GetImage());
+ widthTextHeader -= posterWidth + border;
+ }
+ } else if (imgLoader.LoadRecordingImage(recording->FileName())) {
+ pixmap->DrawImage(cPoint(width - config.GetValue("epgImageWidth") - border, y), imgLoader.GetImage());
+ widthTextHeader -= config.GetValue("epgImageWidth") + border;
+ recImageFound = true;
+ }
+ const cRecordingInfo *info = recording->Info();
+ if (!info)
+ return;
+ cString recTitle;
+ if (info->Title())
+ recTitle = info->Title();
+ else
+ recTitle = recording->Name();
+ //Title
+ y = DrawTextWrapper(*recTitle, widthTextHeader, y, border, fontHeader, Theme.Color(clrMenuFontDetailViewHeaderTitle), height);
+ //Short Text
+ if (!isempty(info->ShortText())) {
+ y = DrawTextWrapper(info->ShortText(), widthTextHeader, y, border, font, Theme.Color(clrMenuFontDetailViewHeader), height);
+ }
+ y += fontHeader->Height();
+ //Description
+ if ((hasPoster || hasManualPoster) && (y < (border + posterHeight))) {
+ int heightNarrow = border + posterHeight - y;
+ DrawTextWrapperFloat(recording->Info()->Description(),
+ widthTextHeader, widthText, y, heightNarrow,
+ border, font, Theme.Color(clrMenuFontDetailViewText), height);
+ } else if (recImageFound && (y < (border + config.GetValue("epgImageHeight")))) {
+ y = border + config.GetValue("epgImageHeight");
+ DrawTextWrapper(recording->Info()->Description(), widthText, y, border, font, Theme.Color(clrMenuFontDetailViewText), height);
+ } else {
+ DrawTextWrapper(recording->Info()->Description(), widthText, y, border, font, Theme.Color(clrMenuFontDetailViewText), height);
+ }
+}
+
+int cNopacityTextWindow::DrawTextWrapper(const char *text, int width, int top, int x,
+ const cFont *font, tColor color, int maxHeight) {
+ cTextWrapper wrapper;
+ int lineHeight = font->Height();
+ wrapper.Set(text, font, width);
+ int y = top;
+ for (int i=0; i < wrapper.Lines(); i++) {
+ if (y + 2*lineHeight > maxHeight) {
+ pixmap->DrawText(cPoint(x, y), "...", color, clrTransparent, font);
+ y += 2*lineHeight;
+ break;
+ }
+ pixmap->DrawText(cPoint(x, y), wrapper.GetLine(i), color, clrTransparent, font);
+ y += lineHeight;
+ }
+ return y;
+}
+
+void cNopacityTextWindow::DrawTextWrapperFloat(const char *text, int widthSmall, int widthFull,
+ int top, int heightNarrow, int x, const cFont *font,
+ tColor color, int maxHeight) {
+
+ if (!text)
+ return;
+ int lineHeight = font->Height();
+ int numLinesNarrow = heightNarrow / lineHeight + 1;
+ splitstring s(text);
+ std::vector<std::string> flds = s.split('\n', 1);
+ if (flds.size() < 1)
+ return;
+ int y = top;
+ int linesDrawn = 0;
+ bool drawNarrow = true;
+ for (int i=0; i<flds.size(); i++) {
+ if (!flds[i].size()) {
+ //empty line
+ linesDrawn++;
+ y += lineHeight;
+ } else {
+ cTextWrapper wrapper;
+ if (drawNarrow) {
+ wrapper.Set((flds[i].c_str()), font, widthSmall);
+ int newLines = wrapper.Lines();
+ //check if wrapper fits completely into narrow area
+ if (linesDrawn + newLines < numLinesNarrow) {
+ y = DrawTextWrapper(flds[i].c_str(), widthSmall, y, x, font, color, maxHeight);
+ linesDrawn += newLines;
+ } else {
+ //this wrapper has to be splitted
+ std::stringstream sstrTextTall;
+ std::stringstream sstrTextFull;
+ for (int line = 0; line < wrapper.Lines(); line++) {
+ if (line + linesDrawn < numLinesNarrow) {
+ sstrTextTall << wrapper.GetLine(line) << " ";
+ } else {
+ sstrTextFull << wrapper.GetLine(line) << " ";
+ }
+ }
+ y = DrawTextWrapper(sstrTextTall.str().c_str(), widthSmall, y, x, font, color, maxHeight);
+ y = DrawTextWrapper(sstrTextFull.str().c_str(), widthFull, y, x, font, color, maxHeight);
+ drawNarrow = false;
+ }
+ } else {
+ if (y > maxHeight)
+ break;
+ y = DrawTextWrapper(flds[i].c_str(), widthFull, y, x, font, color, maxHeight);
+ }
+ }
+ }
+}
+
+void cNopacityTextWindow::DrawPoster(int border) {
+ int posterY = font->Height() / 2;
+ cImageLoader imgLoader;
+ if (hasManualPoster) {
+ if (imgLoader.LoadPoster(*manualPosterPath, posterWidth, posterHeight)) {
+ pixmap->DrawImage(cPoint(border, posterY), imgLoader.GetImage());
+ }
+ } else if (imgLoader.LoadPoster(posterScraper2Vdr.poster.path.c_str(), posterWidth, posterHeight)) {
+ pixmap->DrawImage(cPoint(border, posterY), imgLoader.GetImage());
}
- cPixmap::Unlock();
}
void cNopacityTextWindow::DoSleep(int duration) {
@@ -60,23 +396,53 @@ void cNopacityTextWindow::DoSleep(int duration) {
for (int i = 0; Running() && (i*sleepSlice < duration); i++)
cCondWait::SleepMs(sleepSlice);
}
-
+
+void cNopacityTextWindow::ScaleVideoWindow(void) {
+ oldVidWin.SetX(vidWin->X());
+ oldVidWin.SetY(vidWin->Y());
+ oldVidWin.SetWidth(vidWin->Width());
+ oldVidWin.SetHeight(vidWin->Height());
+ cRect availableRect(vidWin->X(), vidWin->Y(), vidWin->Width(), vidWin->Height() - geometry->Height());
+ cRect vidWinNew = cDevice::PrimaryDevice()->CanScaleVideo(availableRect);
+ if (vidWinNew != cRect::Null) {
+ vidWin->SetX(vidWinNew.X());
+ vidWin->SetY(vidWinNew.Y());
+ vidWin->SetWidth(vidWinNew.Width());
+ vidWin->SetHeight(vidWinNew.Height());
+ scaledWindow = true;
+ }
+}
+
void cNopacityTextWindow::Action(void) {
- DoSleep(config.menuInfoTextDelay*1000);
-
+ if (! *text)
+ return;
+
+ DoSleep(config.GetValue("menuInfoTextDelay")*1000);
+
+ if (config.GetValue("scalePicture") == 2) {
+ ScaleVideoWindow();
+ }
+
int border = 5;
+ int left = 0;
+ if (hasPoster || hasManualPoster)
+ left = 10 + posterWidth;
bool scrolling = false;
if (Running()) {
- scrolling = CreatePixmap(border);
+ scrolling = SetTextScroller(border, left);
+ CreatePixmap();
}
if (Running()) {
- DrawText(border);
+ DrawText(border, left);
+ }
+ if (Running() && (hasPoster || hasManualPoster)) {
+ DrawPoster(border);
}
//FadeIn
- if (config.menuEPGWindowFadeTime) {
+ if (config.GetValue("menuEPGWindowFadeTime")) {
uint64_t Start = cTimeMs::Now();
- int FadeTime = config.menuEPGWindowFadeTime;
- int FadeFrameTime = config.menuEPGWindowFrameTime;
+ int FadeTime = config.GetValue("menuEPGWindowFadeTime");
+ int FadeFrameTime = FadeTime / 10;
while (Running()) {
uint64_t Now = cTimeMs::Now();
cPixmap::Lock();
@@ -84,9 +450,9 @@ void cNopacityTextWindow::Action(void) {
int Alpha = t * ALPHA_OPAQUE;
pixmapBackground->SetAlpha(Alpha);
pixmap->SetAlpha(Alpha);
+ cPixmap::Unlock();
if (Running())
osd->Flush();
- cPixmap::Unlock();
int Delta = cTimeMs::Now() - Now;
if (Running() && (Delta < FadeFrameTime))
cCondWait::SleepMs(FadeFrameTime - Delta);
@@ -94,12 +460,19 @@ void cNopacityTextWindow::Action(void) {
break;
}
}
-
+
if (scrolling && Running()) {
- int scrollDelay = config.menuInfoScrollDelay * 1000;
+ int scrollDelay = config.GetValue("menuInfoScrollDelay") * 1000;
DoSleep(scrollDelay);
int drawPortY;
- int FrameTime = config.menuInfoScrollFrameTime;
+ int FrameTime = 0;
+ if (config.GetValue("menuInfoScrollSpeed") == 1)
+ FrameTime = 50;
+ else if (config.GetValue("menuInfoScrollSpeed") == 2)
+ FrameTime = 30;
+ else if (config.GetValue("menuInfoScrollSpeed") == 3)
+ FrameTime = 15;
+
int maxY = pixmap->DrawPort().Height() - pixmap->ViewPort().Height();
bool doSleep = false;
while (Running()) {
@@ -128,4 +501,4 @@ void cNopacityTextWindow::Action(void) {
cCondWait::SleepMs(FrameTime - Delta);
}
}
-}
\ No newline at end of file
+}
diff --git a/textwindow.h b/textwindow.h
index c9bd469..72e50d3 100644
--- a/textwindow.h
+++ b/textwindow.h
@@ -1,23 +1,52 @@
#ifndef __NOPACITY_TEXTWINDOW_H
#define __NOPACITY_TEXTWINDOW_H
+
+#include <vdr/skins.h>
+#include <vdr/thread.h>
+#include "services/scraper2vdr.h"
+
class cNopacityTextWindow : public cThread {
private:
cOsd *osd;
cFont *font;
+ cFont *fontHeader;
cPixmap *pixmapBackground;
cPixmap *pixmap;
cRect *geometry;
- const char *text;
- cTextWrapper twText;
- bool CreatePixmap(int border);
- void DrawText(int border);
+ int drawportHeight;
+ cRect *vidWin;
+ cRect oldVidWin;
+ bool scaledWindow;
+ cString text;
+ cTextWrapper twTextTall;
+ cTextWrapper twTextFull;
+ bool drawTextTall;
+ bool drawTextFull;
+ bool hasManualPoster;
+ cString manualPosterPath;
+ bool hasPoster;
+ ScraperGetPoster posterScraper2Vdr;
+ int posterWidth, posterHeight;
+ bool SetTextScroller(int border, int left);
+ void CreatePixmap(void);
+ void CreatePixmapFullScreen(void);
+ void DrawText(int border, int left);
+ void DrawPoster(int border);
+ int DrawTextWrapper(const char *text, int width, int top, int x, const cFont *font, tColor color, int maxHeight);
+ void DrawTextWrapperFloat(const char *text, int widthSmall, int widthFull, int top, int heightNarrow, int x, const cFont *font, tColor color, int maxHeight);
void DoSleep(int duration);
virtual void Action(void);
+ void ScaleVideoWindow(void);
public:
- cNopacityTextWindow(cOsd *osd, cFont *font);
+ cNopacityTextWindow(cOsd *osd, cFont *font, cRect *vidWin);
+ cNopacityTextWindow(cOsd *osd, cFont *font, cFont *fontHeader);
virtual ~cNopacityTextWindow(void);
void SetGeometry(cRect *geo) {geometry = geo;};
- void SetText(const char *Text) {text = Text;};
+ void SetEvent(const cEvent *event);
+ void SetRecording(const cRecording *recording);
+ void SetText(cString Text) {text = Text;};
+ bool SetManualPoster(const cRecording *recording, bool fullscreen = false);
+ void SetPoster(const cEvent *event, const cRecording *recording, bool fullscreen = false);
};
#endif //__NOPACITY_TEXTWINDOW_H
\ No newline at end of file
diff --git a/themes/nOpacity-anthra.theme b/themes/nOpacity-anthra.theme
new file mode 100644
index 0000000..7a4cbc5
--- /dev/null
+++ b/themes/nOpacity-anthra.theme
@@ -0,0 +1,97 @@
+Description = anthra
+clrChannelBackground = B012273f
+clrChannelBackBlend = B0858585
+
+clrChannelHead = FFFFFFFF
+clrChannelEPG = FFFFFFFF
+clrChannelEPGInfo = FFFFFFFF
+clrChannelEPGNext = FFFFFFFF
+clrChannelEPGInfoNext = FFFFFFFF
+clrChannelProgressBar = FF333333
+clrChannelProgressBarBack = FFFFFFFF
+clrChannelProgressBarBlend = FF7D7D7D
+clrStatusIconsBack = 00000000
+clrRecNow = DDFF0000
+clrRecNowFont = FFFFFFFF
+clrRecNext = DDFFFF00
+clrRecNextFont = FF000000
+
+clrReplayBackground = AA353B4E
+clrReplayBackBlend = B0858585
+clrReplayHead = FFFFFFFF
+clrReplayDescription = FFFFFFFF
+clrReplayCurrentTotal = FFFFFFFF
+clrReplayProgressSeen = FF7D7D7D
+clrReplayProgressRest = FFFFFFFF
+clrReplayProgressSelected = FF000000
+clrReplayProgressMark = FF000000
+clrReplayProgressCurrent = 90FFFFFF
+clrReplayHighlightIcon = FFFFD700
+
+clrTracksFontHead = FF858585
+clrTracksFontButtons = FFFFFFFF
+clrVolumeFont = FFFFFFFF
+clrMenuBack = 00000000
+clrMenuBorder = 00000000
+clrMenuScrollBar = 900000FF
+clrMenuScrollBarBack = 99000000
+clrMenuScrollBarBase = 00000000
+clrMenuItem = 7D000000
+clrMenuItemBlend = 64000000
+clrMenuItemHigh = 7D000000
+clrMenuItemHighBlend = FE999999
+clrSeparatorBorder = EE444444
+clrDiskAlert = 90cc0000
+clrTimersBack = 7D000000
+clrTimersBackBlend = FE999999
+#############################
+clrMenuFontHeader = FFFFFFFF
+clrMenuFontDate = FFFFFFFF
+###################################
+clrMenuFontDiscUsage = FFFFFFFF
+clrMenuFontTimers = FFFFFFFF
+clrMenuFontTimersHeader = FFFFFFFF
+clrMenuFontDetailViewText = FFFFFFFF
+clrMenuFontDetailViewHeader = FF858585
+clrMenuFontDetailViewHeaderTitle = FFFFFFFF
+clrMenuFontMenuItem = FFFFFFFF
+#####################
+clrMenuFontMenuItemHigh = FFFFFFFF
+clrMenuFontMenuItemTitle = FFFFFFFF
+clrMenuFontMenuItemSep = FFFFFFFF
+##################
+clrMenuHeader = DD000000
+clrMenuHeaderBlend = 60FFFFFF
+clrAudioMenuHeader = DD000000
+####
+clrProgressBar = FF7D7D7D
+clrProgressBarBack = FFFFFFFF
+clrProgressBarBlend = FF333333
+clrProgressBarHigh = FF7D7D7D
+clrProgressBarBackHigh = DD000000
+clrProgressBarBlendHigh = FF7D7D7D
+
+clrMenuTextWindow = B0000000
+clrMenuChannelLogoBack = 7DFFFFFF
+clrButtonRed = 99BB0000
+clrButtonRedBorder = FFBB0000
+clrButtonRedFont = FFFFFFFF
+clrButtonGreen = 9900BB00
+clrButtonGreenBorder = FF00BB00
+clrButtonGreenFont = FFFFFFFF
+clrButtonYellow = 99BBBB00
+clrButtonYellowBorder = FFBBBB00
+clrButtonYellowFont = FFFFFFFF
+clrButtonBlue = 990000BB
+clrButtonBlueBorder = FF0000BB
+clrButtonBlueFont = FFFFFFFF
+clrMessageFontStatus = FFFFFFFF
+clrMessageFontInfo = FFFFFFFF
+clrMessageFontWarning = FFFFFFFF
+clrMessageFontError = FFFFFFFF
+clrMessageStatus = 9000BBFF
+clrMessageInfo = 90009900
+clrMessageWarning = 90BBBB00
+clrMessageError = 90BB0000
+clrMessageBlend = DD000000
+clrMenuDetailViewTabs = DD0000ad
diff --git a/themes/nOpacity-blue.theme b/themes/nOpacity-blue.theme
new file mode 100644
index 0000000..34404d4
--- /dev/null
+++ b/themes/nOpacity-blue.theme
@@ -0,0 +1,90 @@
+Description = Blue
+clrChannelBackground = B0000000
+clrChannelBackBlend = B0003DF5
+clrChannelHead = FF0066FF
+clrChannelEPG = FFFFFFFF
+clrChannelEPGInfo = FFFFFFFF
+clrChannelEPGNext = FF858585
+clrChannelEPGInfoNext = FF858585
+clrChannelProgressBar = DD003DF5
+clrChannelProgressBarBack = DD858585
+clrChannelProgressBarBlend = DD80B3FF
+clrStatusIconsBack = 00000000
+clrRecNow = DDFF0000
+clrRecNowFont = FFFFFFFF
+clrRecNext = DDFFFF00
+clrRecNextFont = FF000000
+clrReplayBackground = B0000000
+clrReplayBackBlend = B0003DF5
+clrReplayHead = FFFFFFFF
+clrReplayDescription = FF858585
+clrReplayCurrentTotal = FF003DF5
+clrReplayProgressSeen = DD80B3FF
+clrReplayProgressRest = DD858585
+clrReplayProgressSelected = FF000000
+clrReplayProgressMark = FF000000
+clrReplayProgressCurrent = 90FFFFFF
+clrReplayHighlightIcon = DD003DF5
+clrTracksFontHead = FF858585
+clrTracksFontButtons = FFFFFFFF
+clrVolumeFont = FF858585
+clrMenuBack = DD000000
+clrMenuBorder = DD003DF5
+clrMenuScrollBar = DD003DF5
+clrMenuScrollBarBack = 40003DF5
+clrMenuScrollBarBase = 00000000
+clrMenuItem = EE444444
+clrMenuItemBlend = 90000000
+clrMenuItemHigh = DD000000
+clrMenuItemHighBlend = EE0033FF
+clrSeparatorBorder = EE444444
+clrDiskAlert = DDFF0000
+clrTimersBack = EE0033FF
+clrTimersBackBlend = DD000000
+clrMenuFontHeader = FFFFFFFF
+clrMenuFontDate = FFFFFFFF
+clrMenuFontDiscUsage = FFFFFFFF
+clrMenuFontDiscUsagePerc = FFFFFFFF
+clrMenuFontTimers = FFFFFFFF
+clrMenuFontTimersHeader = FFFFFFFF
+clrMenuFontDetailViewText = FFFFFFFF
+clrMenuFontDetailViewHeader = FF858585
+clrMenuFontDetailViewHeaderTitle = FF0066FF
+clrMenuFontMenuItem = FFFFFFFF
+clrMenuFontMenuItemHigh = FF0066FF
+clrMenuFontMenuItemTitle = FF0066FF
+clrMenuFontMenuItemSep = FF858585
+clrMenuHeader = DD000000
+clrMenuHeaderBlend = EE0033FF
+clrAudioMenuHeader = DD000000
+clrProgressBar = DD003DF5
+clrProgressBarBack = DD858585
+clrProgressBarBlend = DD80B3FF
+clrProgressBarHigh = DD003DF5
+clrProgressBarBackHigh = DD858585
+clrProgressBarBlendHigh = DD80B3FF
+clrMenuTextWindow = DD000000
+clrMenuChannelLogoBack = DD858585
+clrMenuDetailViewBack = 55000000
+clrMenuDetailViewTabs = 44003DF5
+clrButtonRed = 99BB0000
+clrButtonRedBorder = FFBB0000
+clrButtonRedFont = FFFFFFFF
+clrButtonGreen = 9900BB00
+clrButtonGreenBorder = FF00BB00
+clrButtonGreenFont = FFFFFFFF
+clrButtonYellow = 99BBBB00
+clrButtonYellowBorder = FFBBBB00
+clrButtonYellowFont = FFFFFFFF
+clrButtonBlue = 990000BB
+clrButtonBlueBorder = FF0000BB
+clrButtonBlueFont = FFFFFFFF
+clrMessageFontStatus = FFFFFFFF
+clrMessageFontInfo = FFFFFFFF
+clrMessageFontWarning = FFFFFFFF
+clrMessageFontError = FFFFFFFF
+clrMessageStatus = 900000FF
+clrMessageInfo = 90009900
+clrMessageWarning = 90BBBB00
+clrMessageError = 90BB0000
+clrMessageBlend = DD000000
\ No newline at end of file
diff --git a/themes/nOpacity-darkblue.theme b/themes/nOpacity-darkblue.theme
index 4ef3669..00f2164 100644
--- a/themes/nOpacity-darkblue.theme
+++ b/themes/nOpacity-darkblue.theme
@@ -3,13 +3,17 @@ clrChannelBackground = B0000000
clrChannelBackBlend = DD5078ab
clrChannelHead = FFEEEEEE
clrChannelEPG = FFFFFFFF
-clrChannelEPGInfo = FF858585
-clrProgressBar = DD4979b9
-clrProgressBarBack = DD858585
-clrProgressBarBlend = DD031B3C
-clrChannelSymbolOn = DD5078ab
-clrChannelSymbolOff = DD858585
-clrChannelRecActive = DDFF0000
+clrChannelEPGInfo = FFFFFFFF
+clrChannelEPGNext = FF858585
+clrChannelEPGInfoNext = FF858585
+clrChannelProgressBar = DD4979b9
+clrChannelProgressBarBack = DD858585
+clrChannelProgressBarBlend = DD031B3C
+clrStatusIconsBack = 00000000
+clrRecNow = DDFF0000
+clrRecNowFont = FFFFFFFF
+clrRecNext = DDFFFF00
+clrRecNextFont = FF000000
clrReplayBackground = B0000000
clrReplayBackBlend = DD5078ab
clrReplayHead = FFFFFFFF
@@ -28,20 +32,21 @@ clrMenuBack = DD000000
clrMenuBorder = DD8c8c8c
clrMenuScrollBar = DD8c8c8c
clrMenuScrollBarBack = 40135474
-clrMenuItem = DD5078ab
+clrMenuScrollBarBase = 00000000
+clrMenuItem = DD5078AB
clrMenuItemBlend = DD000000
clrMenuItemHigh = DD618A9E
clrMenuItemHighBlend = EE135474
-clrMenuHeader = DD000000
-clrMenuHeaderBlend = EE135474
+clrSeparatorBorder = EE444444
clrDiskAlert = DDFF0000
+clrTimersBack = DD5078AB
+clrTimersBackBlend = DD000000
clrMenuFontHeader = FFFFFFFF
clrMenuFontDate = FFFFFFFF
clrMenuFontDiscUsage = FFFFFFFF
-clrMenuFontButton = FFFFFFFF
+clrMenuFontDiscUsagePerc = FFFFFFFF
clrMenuFontTimers = FFFFFFFF
clrMenuFontTimersHeader = FFFFFFFF
-clrMenuFontMessages = FFFFFFFF
clrMenuFontDetailViewText = FFFFFFFF
clrMenuFontDetailViewHeader = FF858585
clrMenuFontDetailViewHeaderTitle = FFB6C6E0
@@ -49,17 +54,37 @@ clrMenuFontMenuItem = FFFFFFFF
clrMenuFontMenuItemHigh = FFFFFFFF
clrMenuFontMenuItemTitle = FFB6C6E0
clrMenuFontMenuItemSep = FF858585
+clrMenuHeader = DD000000
+clrMenuHeaderBlend = EE135474
+clrAudioMenuHeader = DD000000
+clrProgressBar = DD4979b9
+clrProgressBarBack = DD858585
+clrProgressBarBlend = DD031B3C
+clrProgressBarHigh = DD4979b9
+clrProgressBarBackHigh = DD858585
+clrProgressBarBlendHigh = DD031B3C
+clrMenuTextWindow = DD000000
+clrMenuChannelLogoBack = DD858585
+clrMenuDetailViewBack = 55000000
+clrMenuDetailViewTabs = 99242A38
clrButtonRed = 99BB0000
clrButtonRedBorder = FFBB0000
+clrButtonRedFont = FFFFFFFF
clrButtonGreen = 9900BB00
clrButtonGreenBorder = FF00BB00
+clrButtonGreenFont = FFFFFFFF
clrButtonYellow = FFBBBB00
clrButtonYellowBorder = FFBBBB00
+clrButtonYellowFont = FFFFFFFF
clrButtonBlue = 990000BB
clrButtonBlueBorder = FF0000BB
-clrMessageFont = FFFFFFFF
+clrButtonBlueFont = FFFFFFFF
+clrMessageFontStatus = FFFFFFFF
+clrMessageFontInfo = FFFFFFFF
+clrMessageFontWarning = FFFFFFFF
+clrMessageFontError = FFFFFFFF
clrMessageStatus = 900000FF
clrMessageInfo = 90009900
clrMessageWarning = 90BBBB00
clrMessageError = 90BB0000
-clrMessageBlend = DD000000
+clrMessageBlend = DD000000
\ No newline at end of file
diff --git a/themes/nOpacity-darkgrey.theme b/themes/nOpacity-darkgrey.theme
new file mode 100644
index 0000000..2afad2b
--- /dev/null
+++ b/themes/nOpacity-darkgrey.theme
@@ -0,0 +1,90 @@
+Description = Dark Grey
+clrChannelBackground = B0000000
+clrChannelBackBlend = B0858585
+clrChannelHead = FFEEEEEE
+clrChannelEPG = FFFFFFFF
+clrChannelEPGInfo = FF858585
+clrChannelEPGNext = FF858585
+clrChannelEPGInfoNext = FF858585
+clrChannelProgressBar = DD4E78B1
+clrChannelProgressBarBack = DD858585
+clrChannelProgressBarBlend = DD80B3FF
+clrStatusIconsBack = 00000000
+clrRecNow = DDFF0000
+clrRecNowFont = FFFFFFFF
+clrRecNext = DDFFFF00
+clrRecNextFont = FF000000
+clrReplayBackground = B0000000
+clrReplayBackBlend = B0858585
+clrReplayHead = FFFFFFFF
+clrReplayDescription = FF858585
+clrReplayCurrentTotal = FFFFFFFF
+clrReplayProgressSeen = DD80B3FF
+clrReplayProgressRest = DD858585
+clrReplayProgressSelected = FF000000
+clrReplayProgressMark = FF000000
+clrReplayProgressCurrent = 90FFFFFF
+clrReplayHighlightIcon = FFFFD700
+clrTracksFontHead = FF858585
+clrTracksFontButtons = FFFFFFFF
+clrVolumeFont = FFFFFFFF
+clrMenuBack = BD000000
+clrMenuBorder = 64135474
+clrMenuScrollBar = 80858585
+clrMenuScrollBarBack = 32858585
+clrMenuScrollBarBase = 00000000
+clrMenuItem = 7D444444
+clrMenuItemBlend = 64000000
+clrMenuItemHigh = 7D000000
+clrMenuItemHighBlend = FE999999
+clrSeparatorBorder = EE444444
+clrDiskAlert = 90cc0000
+clrTimersBack = 7D000000
+clrTimersBackBlend = FE999999
+clrMenuFontHeader = FFFFFFFF
+clrMenuFontDate = FFFFFFFF
+clrMenuFontDiscUsage = FFFFFFFF
+clrMenuFontDiscUsagePerc = FFFFFFFF
+clrMenuFontTimers = FFFFFFFF
+clrMenuFontTimersHeader = FFFFFFFF
+clrMenuFontDetailViewText = FFFFFFFF
+clrMenuFontDetailViewHeader = FF858585
+clrMenuFontDetailViewHeaderTitle = FFFFFFFF
+clrMenuFontMenuItem = FFFFFFFF
+clrMenuFontMenuItemHigh = FFFFFFFF
+clrMenuFontMenuItemTitle = FFFFFFFF
+clrMenuFontMenuItemSep = FF858585
+clrMenuHeader = DD000000
+clrMenuHeaderBlend = 60FFFFFF
+clrAudioMenuHeader = DD000000
+clrProgressBar = DD4E78B1
+clrProgressBarBack = DD858585
+clrProgressBarBlend = DD80B3FF
+clrProgressBarHigh = DD4E78B1
+clrProgressBarBackHigh = DD858585
+clrProgressBarBlendHigh = DD80B3FF
+clrMenuTextWindow = BD000000
+clrMenuChannelLogoBack = DD858585
+clrMenuDetailViewBack = 55000000
+clrMenuDetailViewTabs = 99242A38
+clrButtonRed = 99BB0000
+clrButtonRedBorder = FFBB0000
+clrButtonRedFont = FFFFFFFF
+clrButtonGreen = 9900BB00
+clrButtonGreenBorder = FF00BB00
+clrButtonGreenFont = FFFFFFFF
+clrButtonYellow = 99BBBB00
+clrButtonYellowBorder = FFBBBB00
+clrButtonYellowFont = FFFFFFFF
+clrButtonBlue = 990000BB
+clrButtonBlueBorder = FF0000BB
+clrButtonBlueFont = FFFFFFFF
+clrMessageFontStatus = FFFFFFFF
+clrMessageFontInfo = FFFFFFFF
+clrMessageFontWarning = FFFFFFFF
+clrMessageFontError = FFFFFFFF
+clrMessageStatus = 9000BBFF
+clrMessageInfo = 90009900
+clrMessageWarning = 90BBBB00
+clrMessageError = 90BB0000
+clrMessageBlend = DD000000
\ No newline at end of file
diff --git a/themes/nOpacity-darkred.theme b/themes/nOpacity-darkred.theme
index faef337..91db17a 100644
--- a/themes/nOpacity-darkred.theme
+++ b/themes/nOpacity-darkred.theme
@@ -3,13 +3,17 @@ clrChannelBackground = CC000000
clrChannelBackBlend = CC333333
clrChannelHead = FFEEEEEE
clrChannelEPG = FFCCCCCC
-clrChannelEPGInfo = FF858585
-clrProgressBar = DDBB0000
-clrProgressBarBack = DD222222
-clrProgressBarBlend = DD550000
-clrChannelSymbolOn = aa770000
-clrChannelSymbolOff = aa222222
-clrChannelRecActive = DDFF0000
+clrChannelEPGInfo = FFCCCCCC
+clrChannelEPGNext = FF858585
+clrChannelEPGInfoNext = FF858585
+clrChannelProgressBar = DDBB0000
+clrChannelProgressBarBack = DD222222
+clrChannelProgressBarBlend = DD550000
+clrStatusIconsBack = 00000000
+clrRecNow = DDFF0000
+clrRecNowFont = FFFFFFFF
+clrRecNext = DDFFFF00
+clrRecNextFont = FF000000
clrReplayBackground = CC000000
clrReplayBackBlend = CC333333
clrReplayHead = FFCCCCCC
@@ -20,28 +24,31 @@ clrReplayProgressRest = DD222222
clrReplayProgressSelected = FF000000
clrReplayProgressMark = FF000000
clrReplayProgressCurrent = 90FFFFFF
-clrReplayHighlightIcon = B0555555
+clrReplayHighlightIcon = 90DDDDDD
clrTracksFontHead = FF858585
clrTracksFontButtons = FFCCCCCC
clrVolumeFont = FF858585
clrMenuBack = DD000000
-clrMenuBorder = FF050505
+clrMenuBorder = FF050505
clrMenuScrollBar = DD550000
clrMenuScrollBarBack = dd000000
+clrMenuScrollBarBase = 00000000
clrMenuItem = DD333333
clrMenuItemBlend = DD000000
clrMenuItemHigh = DDBB0000
clrMenuItemHighBlend = DD000000
-clrMenuHeader = DD000000
-clrMenuHeaderBlend = DDBB0000
+clrMenuDetailViewBack = 55000000
+clrMenuDetailViewTabs = 66550000
+clrSeparatorBorder = EE444444
clrDiskAlert = DDBB0000
+clrTimersBack = DD000000
+clrTimersBackBlend = DDBB0000
clrMenuFontHeader = FFCCCCCC
clrMenuFontDate = FFCCCCCC
clrMenuFontDiscUsage = FFCCCCCC
-clrMenuFontButton = FFCCCCCC
+clrMenuFontDiscUsagePerc = FFCCCCCC
clrMenuFontTimers = FFCCCCCC
clrMenuFontTimersHeader = FFCCCCCC
-clrMenuFontMessages = FFCCCCCC
clrMenuFontDetailViewText = FFCCCCCC
clrMenuFontDetailViewHeader = FF858585
clrMenuFontDetailViewHeaderTitle = FFDDDDDD
@@ -49,17 +56,35 @@ clrMenuFontMenuItem = FFCCCCCC
clrMenuFontMenuItemHigh = FFCCCCCC
clrMenuFontMenuItemTitle = FFDDDDDD
clrMenuFontMenuItemSep = FF858585
-clrButtonRed = 99BB0000
+clrMenuHeader = DD000000
+clrMenuHeaderBlend = DDBB0000
+clrAudioMenuHeader = DD000000
+clrProgressBar = DDBB0000
+clrProgressBarBack = DD222222
+clrProgressBarBlend = DD550000
+clrProgressBarHigh = DDBB0000
+clrProgressBarBackHigh = DD222222
+clrProgressBarBlendHigh = DD550000
+clrMenuTextWindow = DD000000
+clrMenuChannelLogoBack = 00000000
+clrButtonRed = DDBB0000
clrButtonRedBorder = FF000000
-clrButtonGreen = 9900BB00
+clrButtonRedFont = FFFFFFFF
+clrButtonGreen = DD00BB00
clrButtonGreenBorder = FF000000
-clrButtonYellow = 99BBBB00
+clrButtonGreenFont = FFFFFFFF
+clrButtonYellow = DDBBBB00
clrButtonYellowBorder = FF000000
-clrButtonBlue = 990000BB
+clrButtonYellowFont = FFFFFFFF
+clrButtonBlue = DD0000BB
clrButtonBlueBorder = FF000000
-clrMessageFont = FFCCCCCC
-clrMessageStatus = 900000FF
-clrMessageInfo = 90009900
-clrMessageWarning = 90BBBB00
-clrMessageError = 90BB0000
+clrButtonBlueFont = FFFFFFFF
+clrMessageFontStatus = FFFFFFFF
+clrMessageFontInfo = FFFFFFFF
+clrMessageFontWarning = FFFFFFFF
+clrMessageFontError = FFFFFFFF
+clrMessageStatus = DD0000BB
+clrMessageInfo = DD00BB00
+clrMessageWarning = DDBBBB00
+clrMessageError = DDBB0000
clrMessageBlend = DD000000
diff --git a/themes/nOpacity-darkred.theme b/themes/nOpacity-darkredNG.theme
similarity index 60%
copy from themes/nOpacity-darkred.theme
copy to themes/nOpacity-darkredNG.theme
index faef337..24bbffb 100644
--- a/themes/nOpacity-darkred.theme
+++ b/themes/nOpacity-darkredNG.theme
@@ -1,15 +1,19 @@
-Description = Dark Red
+Description = Dark Red NG
clrChannelBackground = CC000000
clrChannelBackBlend = CC333333
clrChannelHead = FFEEEEEE
clrChannelEPG = FFCCCCCC
-clrChannelEPGInfo = FF858585
-clrProgressBar = DDBB0000
-clrProgressBarBack = DD222222
-clrProgressBarBlend = DD550000
-clrChannelSymbolOn = aa770000
-clrChannelSymbolOff = aa222222
-clrChannelRecActive = DDFF0000
+clrChannelEPGInfo = FFCCCCCC
+clrChannelEPGNext = FF858585
+clrChannelEPGInfoNext = FF858585
+clrChannelProgressBar = DDBB0000
+clrChannelProgressBarBack = DD222222
+clrChannelProgressBarBlend = DD550000
+clrStatusIconsBack = 00000000
+clrRecNow = DDFF0000
+clrRecNowFont = FFFFFFFF
+clrRecNext = DDFFFF00
+clrRecNextFont = FF000000
clrReplayBackground = CC000000
clrReplayBackBlend = CC333333
clrReplayHead = FFCCCCCC
@@ -20,28 +24,29 @@ clrReplayProgressRest = DD222222
clrReplayProgressSelected = FF000000
clrReplayProgressMark = FF000000
clrReplayProgressCurrent = 90FFFFFF
-clrReplayHighlightIcon = B0555555
+clrReplayHighlightIcon = 90DDDDDD
clrTracksFontHead = FF858585
clrTracksFontButtons = FFCCCCCC
clrVolumeFont = FF858585
clrMenuBack = DD000000
-clrMenuBorder = FF050505
+clrMenuBorder = FF050505
clrMenuScrollBar = DD550000
clrMenuScrollBarBack = dd000000
+clrMenuScrollBarBase = 00000000
clrMenuItem = DD333333
clrMenuItemBlend = DD000000
clrMenuItemHigh = DDBB0000
clrMenuItemHighBlend = DD000000
-clrMenuHeader = DD000000
-clrMenuHeaderBlend = DDBB0000
+clrSeparatorBorder = EE444444
clrDiskAlert = DDBB0000
+clrTimersBack = DD000000
+clrTimersBackBlend = DDBB0000
clrMenuFontHeader = FFCCCCCC
clrMenuFontDate = FFCCCCCC
clrMenuFontDiscUsage = FFCCCCCC
-clrMenuFontButton = FFCCCCCC
+clrMenuFontDiscUsagePerc = FFCCCCCC
clrMenuFontTimers = FFCCCCCC
clrMenuFontTimersHeader = FFCCCCCC
-clrMenuFontMessages = FFCCCCCC
clrMenuFontDetailViewText = FFCCCCCC
clrMenuFontDetailViewHeader = FF858585
clrMenuFontDetailViewHeaderTitle = FFDDDDDD
@@ -49,15 +54,35 @@ clrMenuFontMenuItem = FFCCCCCC
clrMenuFontMenuItemHigh = FFCCCCCC
clrMenuFontMenuItemTitle = FFDDDDDD
clrMenuFontMenuItemSep = FF858585
+clrMenuHeader = DD000000
+clrMenuHeaderBlend = DDBB0000
+clrAudioMenuHeader = DD000000
+clrProgressBar = DDBB0000
+clrProgressBarBack = DD222222
+clrProgressBarBlend = DD550000
+clrProgressBarHigh = DDBB0000
+clrProgressBarBackHigh = DD222222
+clrProgressBarBlendHigh = DD550000
+clrMenuTextWindow = DD000000
+clrMenuChannelLogoBack = DD858585
+clrMenuDetailViewBack = AA000000
+clrMenuDetailViewTabs = 66660000
clrButtonRed = 99BB0000
clrButtonRedBorder = FF000000
+clrButtonRedFont = FFFFFFFF
clrButtonGreen = 9900BB00
clrButtonGreenBorder = FF000000
+clrButtonGreenFont = FFFFFFFF
clrButtonYellow = 99BBBB00
clrButtonYellowBorder = FF000000
+clrButtonYellowFont = FFFFFFFF
clrButtonBlue = 990000BB
clrButtonBlueBorder = FF000000
-clrMessageFont = FFCCCCCC
+clrButtonBlueFont = FFFFFFFF
+clrMessageFontStatus = FFFFFFFF
+clrMessageFontInfo = FFFFFFFF
+clrMessageFontWarning = FFFFFFFF
+clrMessageFontError = FFFFFFFF
clrMessageStatus = 900000FF
clrMessageInfo = 90009900
clrMessageWarning = 90BBBB00
diff --git a/themes/nOpacity-default.theme b/themes/nOpacity-default.theme
new file mode 100644
index 0000000..bce379e
--- /dev/null
+++ b/themes/nOpacity-default.theme
@@ -0,0 +1,90 @@
+Description = Default
+clrChannelBackground = B012273f
+clrChannelBackBlend = B0858585
+clrChannelHead = FFEEEEEE
+clrChannelEPG = FFFFFFFF
+clrChannelEPGInfo = FFFFFFFF
+clrChannelEPGNext = FF858585
+clrChannelEPGInfoNext = FF858585
+clrChannelProgressBar = FFC6D590
+clrChannelProgressBarBack = DD000000
+clrChannelProgressBarBlend = FF8EAB21
+clrStatusIconsBack = 00000000
+clrRecNow = DDFF0000
+clrRecNowFont = FFFFFFFF
+clrRecNext = DDFFFF00
+clrRecNextFont = FF000000
+clrReplayBackground = AA353B4E
+clrReplayBackBlend = B0858585
+clrReplayHead = FFFFFFFF
+clrReplayDescription = FFFFFFFF
+clrReplayCurrentTotal = FFFFFFFF
+clrReplayProgressSeen = FF8EAB21
+clrReplayProgressRest = DD858585
+clrReplayProgressSelected = FF000000
+clrReplayProgressMark = FF000000
+clrReplayProgressCurrent = 90FFFFFF
+clrReplayHighlightIcon = FFFFD700
+clrTracksFontHead = FF858585
+clrTracksFontButtons = FFFFFFFF
+clrVolumeFont = FFFFFFFF
+clrMenuBack = B012273f
+clrMenuBorder = AA242A38
+clrMenuScrollBar = 908EAB21
+clrMenuScrollBarBack = 99242A38
+clrMenuScrollBarBase = 00000000
+clrMenuItem = 7D444444
+clrMenuItemBlend = 64000000
+clrMenuItemHigh = 7D000000
+clrMenuItemHighBlend = FE999999
+clrSeparatorBorder = EE444444
+clrDiskAlert = 90cc0000
+clrTimersBack = 7D000000
+clrTimersBackBlend = FE999999
+clrMenuFontHeader = FFFFFFFF
+clrMenuFontDate = FFFFFFFF
+clrMenuFontDiscUsage = FFFFFFFF
+clrMenuFontDiscUsagePerc = FFFFFFFF
+clrMenuFontTimers = FFFFFFFF
+clrMenuFontTimersHeader = FFFFFFFF
+clrMenuFontDetailViewText = FFFFFFFF
+clrMenuFontDetailViewHeader = FF858585
+clrMenuFontDetailViewHeaderTitle = FFFFFFFF
+clrMenuFontMenuItem = FFFFFFFF
+clrMenuFontMenuItemHigh = FF363636
+clrMenuFontMenuItemTitle = FF363636
+clrMenuFontMenuItemSep = FF858585
+clrMenuHeader = DD000000
+clrMenuHeaderBlend = 60FFFFFF
+clrAudioMenuHeader = DD000000
+clrProgressBar = FFC6D590
+clrProgressBarBack = DD000000
+clrProgressBarBlend = FF8EAB21
+clrProgressBarHigh = DD4E78B1
+clrProgressBarBackHigh = DD000000
+clrProgressBarBlendHigh = DD80B3FF
+clrMenuTextWindow = B0000000
+clrMenuChannelLogoBack = 99C6C6C6
+clrMenuDetailViewBack = 50000000
+clrMenuDetailViewTabs = 99242A38
+clrButtonRed = 99BB0000
+clrButtonRedBorder = FFBB0000
+clrButtonRedFont = FFFFFFFF
+clrButtonGreen = 9900BB00
+clrButtonGreenBorder = FF00BB00
+clrButtonGreenFont = FFFFFFFF
+clrButtonYellow = 99BBBB00
+clrButtonYellowBorder = FFBBBB00
+clrButtonYellowFont = FFFFFFFF
+clrButtonBlue = 990000BB
+clrButtonBlueBorder = FF0000BB
+clrButtonBlueFont = FFFFFFFF
+clrMessageFontStatus = FFFFFFFF
+clrMessageFontInfo = FFFFFFFF
+clrMessageFontWarning = FFFFFFFF
+clrMessageFontError = FFFFFFFF
+clrMessageStatus = 9000BBFF
+clrMessageInfo = 90009900
+clrMessageWarning = 90BBBB00
+clrMessageError = 90BB0000
+clrMessageBlend = DD000000
\ No newline at end of file
diff --git a/themes/nOpacity-green.theme b/themes/nOpacity-green.theme
index 876aa5e..027446c 100644
--- a/themes/nOpacity-green.theme
+++ b/themes/nOpacity-green.theme
@@ -1,15 +1,19 @@
-Description = Green
+Description = Green
clrChannelBackground = B0000000
clrChannelBackBlend = DD006600
clrChannelHead = FFFFCC00
clrChannelEPG = FFFFFFFF
-clrChannelEPGInfo = FF858585
-clrProgressBar = DDFFCC00
-clrProgressBarBack = DD858585
-clrProgressBarBlend = DD006600
-clrChannelSymbolOn = DD006600
-clrChannelSymbolOff = DD858585
-clrChannelRecActive = DDFF0000
+clrChannelEPGInfo = FFFFFFFF
+clrChannelEPGNext = FF858585
+clrChannelEPGInfoNext = FF858585
+clrChannelProgressBar = DDFFCC00
+clrChannelProgressBarBack = DD858585
+clrChannelProgressBarBlend = DD006600
+clrStatusIconsBack = 00000000
+clrRecNow = DDFF0000
+clrRecNowFont = FFFFFFFF
+clrRecNext = DDFFFF00
+clrRecNextFont = FF000000
clrReplayBackground = B0000000
clrReplayBackBlend = DD006600
clrReplayHead = FFFFCC00
@@ -28,21 +32,21 @@ clrMenuBack = DD000000
clrMenuBorder = DD006600
clrMenuScrollBar = DD006600
clrMenuScrollBarBack = AA003300
+clrMenuScrollBarBase = 00000000
clrMenuItem = BB000000
clrMenuItemBlend = EE006600
clrMenuItemHigh = 22000000
clrMenuItemHighBlend = EE006600
-clrMenuHeader = DD000000
-clrMenuHeaderBlend = EE006600
clrSeparatorBorder = EE444444
clrDiskAlert = DDFF0000
+clrTimersBack = 22000000
+clrTimersBackBlend = EE006600
clrMenuFontHeader = FFFFFFFF
clrMenuFontDate = FFFFFFFF
clrMenuFontDiscUsage = FFFFFFFF
-clrMenuFontButton = FFFFFFFF
+clrMenuFontDiscUsagePerc = FFFFFFFF
clrMenuFontTimers = FFFFFFFF
clrMenuFontTimersHeader = FFFFFFFF
-clrMenuFontMessages = FFFFFFFF
clrMenuFontDetailViewText = FFFFFFFF
clrMenuFontDetailViewHeader = FF858585
clrMenuFontDetailViewHeaderTitle = FFFFCC00
@@ -50,17 +54,37 @@ clrMenuFontMenuItem = FFFFFFFF
clrMenuFontMenuItemHigh = FFFFCC00
clrMenuFontMenuItemTitle = FFFFFFFF
clrMenuFontMenuItemSep = FF858585
+clrMenuHeader = DD000000
+clrMenuHeaderBlend = EE006600
+clrAudioMenuHeader = DD000000
+clrProgressBar = DDFFCC00
+clrProgressBarBack = DD858585
+clrProgressBarBlend = DD006600
+clrProgressBarHigh = DDFFCC00
+clrProgressBarBackHigh = DD858585
+clrProgressBarBlendHigh = DD006600
+clrMenuTextWindow = DD000000
+clrMenuChannelLogoBack = DD858585
+clrMenuDetailViewBack = 55000000
+clrMenuDetailViewTabs = 33006600
clrButtonRed = 99BB0000
clrButtonRedBorder = FFBB0000
+clrButtonRedFont = FFFFFFFF
clrButtonGreen = 9900BB00
clrButtonGreenBorder = FF00BB00
+clrButtonGreenFont = FFFFFFFF
clrButtonYellow = FFBBBB00
clrButtonYellowBorder = FFBBBB00
+clrButtonYellowFont = FFFFFFFF
clrButtonBlue = 990000BB
clrButtonBlueBorder = FF0000BB
-clrMessageFont = FFFFFFFF
+clrButtonBlueFont = FFFFFFFF
+clrMessageFontStatus = FFFFFFFF
+clrMessageFontInfo = FFFFFFFF
+clrMessageFontWarning = FFFFFFFF
+clrMessageFontError = FFFFFFFF
clrMessageStatus = 900000FF
clrMessageInfo = 90009900
clrMessageWarning = 90BBBB00
clrMessageError = 90BB0000
-clrMessageBlend = DD000000
+clrMessageBlend = DD000000
\ No newline at end of file
diff --git a/themes/nOpacity-iceblue.theme b/themes/nOpacity-iceblue.theme
new file mode 100644
index 0000000..13514a3
--- /dev/null
+++ b/themes/nOpacity-iceblue.theme
@@ -0,0 +1,90 @@
+Description = IceBlue
+clrChannelBackground = B0FFFFFF
+clrChannelBackBlend = FFFFFFFF
+clrChannelHead = FF000000
+clrChannelEPG = FF000000
+clrChannelEPGInfo = FF000000
+clrChannelEPGNext = FF474750
+clrChannelEPGInfoNext = FF474750
+clrChannelProgressBar = DD3F5468
+clrChannelProgressBarBack = FF000000
+clrChannelProgressBarBlend = DD5A8998
+clrStatusIconsBack = DD3F5468
+clrRecNow = DDFF0000
+clrRecNowFont = FFFFFFFF
+clrRecNext = DDFFFF00
+clrRecNextFont = FF000000
+clrReplayBackground = B0FFFFFF
+clrReplayBackBlend = FF3F5468
+clrReplayHead = FF000000
+clrReplayDescription = FF3F5468
+clrReplayCurrentTotal = FF3F5468
+clrReplayProgressSeen = DD3F5468
+clrReplayProgressRest = DDBDCED0
+clrReplayProgressSelected = FF000000
+clrReplayProgressMark = FF000000
+clrReplayProgressCurrent = 90FFFFFF
+clrReplayHighlightIcon = FF3F5468
+clrTracksFontHead = FFFFFFFF
+clrTracksFontButtons = FF000000
+clrVolumeFont = FF000000
+clrMenuBack = DDFFFFFF
+clrMenuBorder = FF000000
+clrMenuScrollBar = FF000044
+clrMenuScrollBarBack = FFB2B2C7
+clrMenuScrollBarBase = 00000000
+clrMenuItem = FFB2B2C7
+clrMenuItemBlend = FFFFFFFF
+clrMenuItemHigh = FF000044
+clrMenuItemHighBlend = FFFFFFFF
+clrSeparatorBorder = EE444444
+clrDiskAlert = DDFF0000
+clrTimersBack = FFB2B2C7
+clrTimersBackBlend = FFFFFFFF
+clrMenuFontHeader = FF000000
+clrMenuFontDate = FF000000
+clrMenuFontDiscUsage = FF000000
+clrMenuFontDiscUsagePerc = FF000000
+clrMenuFontTimers = FF000000
+clrMenuFontTimersHeader = FF000000
+clrMenuFontDetailViewText = FF000000
+clrMenuFontDetailViewHeader = FF000044
+clrMenuFontDetailViewHeaderTitle = FF000044
+clrMenuFontMenuItem = FF000000
+clrMenuFontMenuItemHigh = FFFFFFFF
+clrMenuFontMenuItemTitle = FF000000
+clrMenuFontMenuItemSep = FF000000
+clrMenuHeader = 22FFFFFF
+clrMenuHeaderBlend = FFFFFFFF
+clrAudioMenuHeader = 22FFFFFF
+clrProgressBar = DD3F5468
+clrProgressBarBack = FF000000
+clrProgressBarBlend = DD5A8998
+clrProgressBarHigh = DD3F5468
+clrProgressBarBackHigh = FF000000
+clrProgressBarBlendHigh = DD5A8998
+clrMenuTextWindow = DDFFFFFF
+clrMenuChannelLogoBack = 99C6C6C6
+clrMenuDetailViewBack = 99ABABB8
+clrMenuDetailViewTabs = 88B8B8E6
+clrButtonRed = FFCC0000
+clrButtonRedBorder = FF000000
+clrButtonRedFont = FFFFFFFF
+clrButtonGreen = FF00F53D
+clrButtonGreenBorder = FF000000
+clrButtonGreenFont = FFFFFFFF
+clrButtonYellow = FFF5B800
+clrButtonYellowBorder = FF000000
+clrButtonYellowFont = FFFFFFFF
+clrButtonBlue = FF003DF5
+clrButtonBlueBorder = FF000000
+clrButtonBlueFont = FFFFFFFF
+clrMessageFontStatus = FFFFFFFF
+clrMessageFontInfo = FFFFFFFF
+clrMessageFontWarning = FFFFFFFF
+clrMessageFontError = FFFFFFFF
+clrMessageStatus = FF003DF5
+clrMessageInfo = FF00F53D
+clrMessageWarning = FFF5B800
+clrMessageError = FFCC0000
+clrMessageBlend = FFFFFFFF
diff --git a/themes/nOpacity-light.theme b/themes/nOpacity-light.theme
new file mode 100644
index 0000000..d107884
--- /dev/null
+++ b/themes/nOpacity-light.theme
@@ -0,0 +1,90 @@
+Description = Keep it Light
+clrChannelBackground = AA000000
+clrChannelBackBlend = AA000000
+clrChannelHead = FFEEEEEE
+clrChannelEPG = FFFFFFFF
+clrChannelEPGInfo = FFE6E6E6
+clrChannelEPGNext = FFBDBDBD
+clrChannelEPGInfoNext = FFBDBDBD
+clrChannelProgressBar = DD6fac10
+clrChannelProgressBarBack = DD858585
+clrChannelProgressBarBlend = DD6fac10
+clrStatusIconsBack = 00000000
+clrRecNow = DDFF0000
+clrRecNowFont = FFFFFFFF
+clrRecNext = DDFFFF00
+clrRecNextFont = FF000000
+clrReplayBackground = AA000000
+clrReplayBackBlend = AA000000
+clrReplayHead = FFFFFFFF
+clrReplayDescription = FFBBBBBB
+clrReplayCurrentTotal = FFFFFFFF
+clrReplayProgressSeen = DD6fac10
+clrReplayProgressRest = CC8c8c8c
+clrReplayProgressSelected = FF000000
+clrReplayProgressMark = FF000000
+clrReplayProgressCurrent = 90FFFFFF
+clrReplayHighlightIcon = B08c8c8c
+clrTracksFontHead = FFEEEEEE
+clrTracksFontButtons = FFFFFFFF
+clrVolumeFont = FFBDBDBD
+clrMenuBack = AA000000
+clrMenuBorder = DD8c8c8c
+clrMenuScrollBar = DD6fac10
+clrMenuScrollBarBack = AA000000
+clrMenuScrollBarBase = 00000000
+clrMenuItem = 40000000
+clrMenuItemBlend = DD000000
+clrMenuItemHigh = DD6fac10
+clrMenuItemHighBlend = EE135474
+clrSeparatorBorder = EE444444
+clrDiskAlert = DDFF0000
+clrTimersBack = AA000000
+clrTimersBackBlend = D0000000
+clrMenuFontHeader = FFFFFFFF
+clrMenuFontDate = FFFFFFFF
+clrMenuFontDiscUsage = FFFFFFFF
+clrMenuFontDiscUsagePerc = FFFFFFFF
+clrMenuFontTimers = FFFFFFFF
+clrMenuFontTimersHeader = FFFFFFFF
+clrMenuFontDetailViewText = FFE6E6E6
+clrMenuFontDetailViewHeader = FFBDBDBD
+clrMenuFontDetailViewHeaderTitle = FFFFFFFF
+clrMenuFontMenuItem = FFFFFFFF
+clrMenuFontMenuItemHigh = FFFFFFFF
+clrMenuFontMenuItemTitle = FFFFFFFF
+clrMenuFontMenuItemSep = FFE6E6E6
+clrMenuHeader = AA000000
+clrMenuHeaderBlend = AA000000
+clrAudioMenuHeader = AA000000
+clrProgressBar = DD6fac10
+clrProgressBarBack = DD858585
+clrProgressBarBlend = DDff3300
+clrProgressBarHigh = DDff3300
+clrProgressBarBackHigh = DD858585
+clrProgressBarBlendHigh = DDff3300
+clrMenuTextWindow = AA000000
+clrMenuChannelLogoBack = 99C6C6C6
+clrMenuDetailViewBack = 55000000
+clrMenuDetailViewTabs = 886fac10
+clrButtonRed = 99BB0000
+clrButtonRedBorder = 99BB0000
+clrButtonRedFont = FFFFFFFF
+clrButtonGreen = 9900BB00
+clrButtonGreenBorder = 9900BB00
+clrButtonGreenFont = FFFFFFFF
+clrButtonYellow = FFBBBB00
+clrButtonYellowBorder = FFBBBB00
+clrButtonYellowFont = FFFFFFFF
+clrButtonBlue = 990000BB
+clrButtonBlueBorder = 990000BB
+clrButtonBlueFont = FFFFFFFF
+clrMessageFontStatus = FFFFFFFF
+clrMessageFontInfo = FFFFFFFF
+clrMessageFontWarning = FFFFFFFF
+clrMessageFontError = FFFFFFFF
+clrMessageStatus = 900000FF
+clrMessageInfo = 90009900
+clrMessageWarning = 90BBBB00
+clrMessageError = 90BB0000
+clrMessageBlend = DD000000
\ No newline at end of file
diff --git a/timers.c b/timers.c
index 2199a72..7c3c197 100644
--- a/timers.c
+++ b/timers.c
@@ -1,174 +1,218 @@
-#include "timers.h"
-
-cNopacityTimer::cNopacityTimer(cOsd *osd, const cTimer *timer, const cFont *font, const cFont *fontLarge) {
- this->osd = osd;
- this->timer = timer;
- this->font = font;
- this->fontLarge = fontLarge;
- isTimerConflict = false;
-}
-
-cNopacityTimer::cNopacityTimer(cOsd *osd, int numConflicts, const cFont *font, const cFont *fontLarge) {
- this->osd = osd;
- this->numConflicts = numConflicts;
- this->font = font;
- this->fontLarge = fontLarge;
- isTimerConflict = true;
-}
-
-cNopacityTimer::~cNopacityTimer(void) {
- osd->DestroyPixmap(pixmapBackground);
- osd->DestroyPixmap(pixmap);
- osd->DestroyPixmap(pixmapLogo);
-}
-
-void cNopacityTimer::SetGeometry(int width, int y) {
- this->width = width;
- this->y = y;
-}
-
-void cNopacityTimer::SetAlpha(int alpha) {
- pixmapBackground->SetAlpha(alpha);
- pixmap->SetAlpha(alpha);
- pixmapLogo->SetAlpha(alpha);
-}
-
-void cNopacityTimer::Show(void) {
- pixmapBackground->SetLayer(2);
- pixmap->SetLayer(3);
- pixmapLogo->SetLayer(4);
-}
-
-void cNopacityTimer::Hide(void) {
- pixmapBackground->SetLayer(-1);
- pixmap->SetLayer(-1);
- pixmapLogo->SetLayer(-1);
-}
-
-void cNopacityTimer::CreateDate(void) {
- if (timer->Recording()) {
- Date = cString::sprintf("-%s", *TimeString(timer->StopTime()));
- } else {
- time_t Now = time(NULL);
- cString Today = WeekDayName(Now);
- cString Time = TimeString(timer->StartTime());
- cString Day = WeekDayName(timer->StartTime());
- if (timer->StartTime() > Now + 6 * SECSINDAY)
- Date = DayDateTime(timer->StartTime());
- else if (strcmp(Day, Today) != 0)
- Date = cString::sprintf("%s %s", *Day, *Time);
- else
- Date = Time;
- if (timer->Flags() & tfVps)
- Date = cString::sprintf("VPS %s", *Date);
- }
-}
-
-void cNopacityTimer::CreateShowName(void) {
- const cEvent *Event = timer->Event();
- cString title("");
- if (Event) {
- title = Event->Title();
- } else {
- const char *File = Setup.FoldersInTimerMenu ? NULL : strrchr(timer->File(), FOLDERDELIMCHAR);
- if (File && strcmp(File + 1, TIMERMACRO_TITLE) && strcmp(File + 1, TIMERMACRO_EPISODE))
- File++;
- else
- File = timer->File();
- title = File;
- std::string name(title);
- size_t index = name.find_last_of(FOLDERDELIMCHAR);
- if (index != std::string::npos)
- title = File + index + 1;
- }
- showName.Set(*title, font, width-10);
-}
-
-void cNopacityTimer::CreateConflictText(void) {
- cString conflictText;
- if (numConflicts == 1) {
- conflictText = cString::sprintf("%d Timer %s", numConflicts, tr("conflict"));
- } else {
- conflictText = cString::sprintf("%d Timer %s", numConflicts, tr("conflicts"));
- }
- showName.Set(*conflictText, fontLarge, width-10);
-}
-
-void cNopacityTimer::CalculateHeight(int space) {
- int numLines = showName.Lines();
- if (isTimerConflict) {
- int lineHeight = fontLarge->Height();
- height = numLines * lineHeight + 2*space;
- } else {
- int lineHeight = font->Height();
- height = config.timersLogoHeight + (numLines +1)* lineHeight + 2*space;
- }
-}
-
-void cNopacityTimer::CreatePixmaps(int x) {
- pixmapBackground = osd->CreatePixmap(2, cRect(x, y, width, height));
- pixmap = osd->CreatePixmap(3, cRect(x, y, width, height));
- pixmapLogo = osd->CreatePixmap(4, cRect(x, y, width, height));
-}
-
-void cNopacityTimer::Render(void) {
- pixmapBackground->Fill(clrBlack);
- cImageLoader imgLoader;
- if (isTimerConflict) {
- pixmapLogo->Fill(clrTransparent);
- pixmap->Fill(Theme.Color(clrDiskAlert));
- imgLoader.DrawBackground(Theme.Color(clrDiskAlert), Theme.Color(clrMenuItemHigh), width-2, height-2);
- pixmap->DrawImage(cPoint(1,1), imgLoader.GetImage());
- int numLines = showName.Lines();
- int textWidth = 0;
- int x = 0;
- int y = 5;
- for (int line=0; line<numLines; line++) {
- textWidth = fontLarge->Width(showName.GetLine(line));
- x = (width - textWidth)/2;
- y += line*fontLarge->Height();
- pixmap->DrawText(cPoint(x, y), showName.GetLine(line), Theme.Color(clrMenuFontTimersHeader), clrTransparent, fontLarge);
- }
- } else {
- DrawLogo();
- if (timer->Recording()) {
- pixmap->Fill(Theme.Color(clrDiskAlert));
- imgLoader.DrawBackground(Theme.Color(clrDiskAlert), Theme.Color(clrMenuItemHigh), width-2, height-2);
- pixmap->DrawImage(cPoint(1,1), imgLoader.GetImage());
- } else {
- pixmap->Fill(Theme.Color(clrMenuBorder));
- imgLoader.DrawBackground(Theme.Color(clrMenuItemHighBlend), Theme.Color(clrMenuItemHigh), width-2, height-2);
- pixmap->DrawImage(cPoint(1,1), imgLoader.GetImage());
- }
-
- pixmap->DrawText(cPoint(5, config.timersLogoHeight), *Date, Theme.Color(clrMenuFontTimersHeader), clrTransparent, fontLarge);
-
- int lineHeight = font->Height();
- int yStart = config.timersLogoHeight + lineHeight + 3;
- int numLines = showName.Lines();
- for (int line=0; line<numLines; line++)
- pixmap->DrawText(cPoint(5, yStart+line*(lineHeight-2)), showName.GetLine(line), Theme.Color(clrMenuFontTimers), clrTransparent, font);
- }
-}
-
-void cNopacityTimer::DrawLogo(void) {
- pixmapLogo->Fill(clrTransparent);
- int logoWidth = config.timersLogoWidth;
- int logoHeight = config.timersLogoHeight;
- const cChannel *Channel = timer->Channel();
- if (Channel && Channel->Name()) {
- cImageLoader imgLoader;
- if (imgLoader.LoadLogo(Channel->Name(), logoWidth, logoHeight)) {
- pixmapLogo->DrawImage(cPoint((width - logoWidth)/2, 1), imgLoader.GetImage());
- } else {
- cTextWrapper channel;
- channel.Set(Channel->Name(), fontLarge, width - 10);
- int lines = channel.Lines();
- int lineHeight = fontLarge->Height();
- int y = 1;
- for (int line = 0; line < lines; line++) {
- pixmapLogo->DrawText(cPoint((width - fontLarge->Width(channel.GetLine(line)))/2, y+lineHeight*line), channel.GetLine(line), Theme.Color(clrMenuFontMenuItemHigh), clrTransparent, fontLarge);
- }
- }
- }
-}
+#include "timers.h"
+#include "config.h"
+#include "imageloader.h"
+#include "helpers.h"
+#include <vdr/recording.h>
+
+cNopacityTimer::cNopacityTimer(cOsd *osd, cImageCache *imgCache, const cTimer *timer, const cFont *font, const cFont *fontLarge) {
+ this->osd = osd;
+ this->imgCache = imgCache;
+ this->timer = timer;
+ this->font = font;
+ this->fontLarge = fontLarge;
+ isTimerConflict = false;
+}
+
+cNopacityTimer::cNopacityTimer(cOsd *osd, cImageCache *imgCache, int numConflicts, const cFont *font, const cFont *fontLarge) {
+ this->osd = osd;
+ this->imgCache = imgCache;
+ this->numConflicts = numConflicts;
+ this->font = font;
+ this->fontLarge = fontLarge;
+ isTimerConflict = true;
+}
+
+cNopacityTimer::~cNopacityTimer(void) {
+ osd->DestroyPixmap(pixmapBackground);
+ osd->DestroyPixmap(pixmap);
+ osd->DestroyPixmap(pixmapLogo);
+ osd->DestroyPixmap(pixmapText);
+}
+
+void cNopacityTimer::SetGeometry(int width, int y) {
+ this->width = width;
+ this->y = y;
+}
+
+void cNopacityTimer::SetAlpha(int alpha) {
+ pixmapBackground->SetAlpha(alpha);
+ pixmap->SetAlpha(alpha);
+ pixmapLogo->SetAlpha(alpha);
+ pixmapText->SetAlpha(alpha);
+}
+
+void cNopacityTimer::Show(void) {
+ pixmapBackground->SetLayer(2);
+ pixmap->SetLayer(3);
+ pixmapLogo->SetLayer(4);
+ pixmapText->SetLayer(5);
+}
+
+void cNopacityTimer::Hide(void) {
+ pixmapBackground->SetLayer(-1);
+ pixmap->SetLayer(-1);
+ pixmapLogo->SetLayer(-1);
+ pixmapText->SetLayer(-1);
+}
+
+void cNopacityTimer::CreateDate(void) {
+ if (timer->Recording()) {
+ Date = cString::sprintf("-%s", *TimeString(timer->StopTime()));
+ } else {
+ time_t Now = time(NULL);
+ cString Today = WeekDayName(Now);
+ cString Time = TimeString(timer->StartTime());
+ cString Day = WeekDayName(timer->StartTime());
+ if (timer->StartTime() > Now + 6 * SECSINDAY)
+ Date = DayDateTime(timer->StartTime());
+ else if (strcmp(Day, Today) != 0)
+ Date = cString::sprintf("%s %s", *Day, *Time);
+ else
+ Date = Time;
+ if (timer->Flags() & tfVps)
+ Date = cString::sprintf("VPS %s", *Date);
+ }
+}
+
+void cNopacityTimer::CreateShowName(void) {
+ const cEvent *Event = timer->Event();
+ cString title("");
+ if (Event) {
+ title = Event->Title();
+ } else {
+ const char *File = Setup.FoldersInTimerMenu ? NULL : strrchr(timer->File(), FOLDERDELIMCHAR);
+ if (File && strcmp(File + 1, TIMERMACRO_TITLE) && strcmp(File + 1, TIMERMACRO_EPISODE))
+ File++;
+ else
+ File = timer->File();
+ title = File;
+ std::string name(title);
+ size_t index = name.find_last_of(FOLDERDELIMCHAR);
+ if (index != std::string::npos)
+ title = File + index + 1;
+ }
+ showName.Set(*title, font, width-10);
+}
+
+void cNopacityTimer::CreateConflictText(void) {
+ cString conflictText;
+ if (numConflicts == 1) {
+ conflictText = cString::sprintf("%d Timer %s", numConflicts, tr("conflict"));
+ } else {
+ conflictText = cString::sprintf("%d Timer %s", numConflicts, tr("conflicts"));
+ }
+ showName.Set(*conflictText, fontLarge, width-10);
+}
+
+void cNopacityTimer::CalculateHeight(int space) {
+ int numLines = showName.Lines();
+ if (isTimerConflict) {
+ int lineHeight = fontLarge->Height();
+ height = numLines * lineHeight + 2*space;
+ } else {
+ int lineHeight = font->Height();
+ int channelLogoHeight = geoManager->menuTimersLogoHeight;
+ if (config.GetValue("showTimers") == 2) {
+ const cChannel *Channel = timer->Channel();
+ if (Channel) {
+ cTextWrapper channel;
+ channel.Set(Channel->Name(), fontLarge, width - 10);
+ int lines = channel.Lines();
+ channelLogoHeight = fontLarge->Height() * lines;
+ }
+ }
+ height = channelLogoHeight + (numLines +1)* lineHeight + 2*space;
+ }
+}
+
+void cNopacityTimer::CreatePixmaps(int x) {
+ pixmapBackground = osd->CreatePixmap(2, cRect(x, y, width, height));
+ pixmap = osd->CreatePixmap(3, cRect(x, y, width, height));
+ pixmapLogo = osd->CreatePixmap(4, cRect(x, y, width, height));
+ pixmapText = osd->CreatePixmap(5, cRect(x, y, width, height));
+}
+
+void cNopacityTimer::Render(void) {
+ pixmapBackground->Fill(clrTransparent);
+ pixmapText->Fill(clrTransparent);
+ if (isTimerConflict) {
+ pixmapLogo->Fill(clrTransparent);
+ pixmap->Fill(Theme.Color(clrDiskAlert));
+ if (config.GetValue("displayType") == dtBlending) {
+ cImage imgBack = imgCache->GetBackground(Theme.Color(clrDiskAlert), Theme.Color(clrMenuItemHigh), width-2, height-2);
+ pixmap->DrawImage(cPoint(1,1), imgBack);
+ } else {
+ pixmap->DrawRectangle(cRect(1, 1, width-2, height-2), Theme.Color(clrDiskAlert));
+ }
+ int numLines = showName.Lines();
+ int textWidth = 0;
+ int x = 0;
+ int y = 5;
+ for (int line=0; line<numLines; line++) {
+ textWidth = fontLarge->Width(showName.GetLine(line));
+ x = (width - textWidth)/2;
+ y += line*fontLarge->Height();
+ pixmapText->DrawText(cPoint(x, y), showName.GetLine(line), Theme.Color(clrMenuFontTimersHeader), clrTransparent, fontLarge);
+ }
+ } else {
+ int logoHeight = DrawLogo();
+ if (timer->Recording()) {
+ pixmap->Fill(Theme.Color(clrDiskAlert));
+ if (config.GetValue("displayType") == dtBlending) {
+ cImage imgBack = imgCache->GetBackground(Theme.Color(clrDiskAlert), Theme.Color(clrMenuItemHigh), width-2, height-2);
+ pixmap->DrawImage(cPoint(1,1), imgBack);
+ } else {
+ pixmap->DrawRectangle(cRect(1, 1, width-2, height-2), Theme.Color(clrDiskAlert));
+ }
+ } else {
+ pixmap->Fill(Theme.Color(clrMenuBorder));
+ if (config.GetValue("displayType") == dtBlending) {
+ cImage imgBack = imgCache->GetBackground(Theme.Color(clrTimersBack), Theme.Color(clrTimersBackBlend), width-2, height-2);
+ pixmap->DrawImage(cPoint(1,1), imgBack);
+ } else {
+ pixmap->DrawRectangle(cRect(1, 1, width-2, height-2), Theme.Color(clrTimersBack));
+ }
+ }
+
+ pixmapText->DrawText(cPoint(5, logoHeight), *Date, Theme.Color(clrMenuFontTimersHeader), clrTransparent, fontLarge);
+
+ int lineHeight = font->Height();
+ int yStart = logoHeight + lineHeight + 3;
+ int numLines = showName.Lines();
+ for (int line=0; line<numLines; line++)
+ pixmapText->DrawText(cPoint(5, yStart+line*(lineHeight-2)), showName.GetLine(line), Theme.Color(clrMenuFontTimers), clrTransparent, font);
+ }
+}
+
+int cNopacityTimer::DrawLogo(void) {
+ int totalHeight = 0;
+ pixmapLogo->Fill(clrTransparent);
+ int showTimerLogo = (config.GetValue("showTimers") < 2) ? 1 : 0;
+ int logoWidth = geoManager->menuTimersLogoWidth;
+ int logoHeight = geoManager->menuTimersLogoHeight;
+ const cChannel *Channel = timer->Channel();
+ if (Channel) {
+ bool logoFound = false;
+ if (showTimerLogo) {
+ cImage *logo = imgCache->GetLogo(ctLogoTimer, Channel);
+ if (logo) {
+ logoFound = true;
+ pixmapLogo->DrawImage(cPoint((width - logoWidth)/2, 1), *logo);
+ }
+ }
+ if (!showTimerLogo || !logoFound) {
+ cTextWrapper channel;
+ channel.Set(Channel->Name(), fontLarge, width - 10);
+ int lines = channel.Lines();
+ int lineHeight = fontLarge->Height();
+ int y = 1;
+ for (int line = 0; line < lines; line++) {
+ pixmapLogo->DrawText(cPoint((width - fontLarge->Width(channel.GetLine(line)))/2, y+lineHeight*line), channel.GetLine(line), Theme.Color(clrMenuFontMenuItemHigh), clrTransparent, fontLarge);
+ }
+ totalHeight = lineHeight * lines;
+ } else {
+ totalHeight = logoHeight;
+ }
+ }
+ return totalHeight;
+}
\ No newline at end of file
diff --git a/timers.h b/timers.h
index dcb1935..6142dfd 100644
--- a/timers.h
+++ b/timers.h
@@ -1,38 +1,45 @@
-#ifndef __NOPACITY_TIMERS_H
-#define __NOPACITY_TIMERS_H
-
-class cNopacityTimer : public cListObject {
- private:
- cOsd *osd;
- cPixmap *pixmapBackground;
- cPixmap *pixmap;
- cPixmap *pixmapLogo;
- const cTimer *timer;
- int numConflicts;
- bool isTimerConflict;
- const cFont *font;
- const cFont *fontLarge;
- int width;
- int height;
- int y;
- cString Date;
- cTextWrapper showName;
- void DrawLogo(void);
- public:
- cNopacityTimer(cOsd *osd, const cTimer *timer, const cFont *font, const cFont *fontLarge);
- cNopacityTimer(cOsd *osd, int numConflicts, const cFont *font, const cFont *fontLarge);
- virtual ~cNopacityTimer(void);
- void SetGeometry(int width, int y);
- void CreateDate(void);
- void CreateShowName(void);
- void CreateConflictText(void);
- void CalculateHeight(int space);
- void CreatePixmaps(int x);
- void SetAlpha(int alpha);
- void Show(void);
- void Hide(void);
- int GetHeight(void) {return pixmap->ViewPort().Height();}
- void Render(void);
-};
-
-#endif //__NOPACITY_TIMERS_H
+#ifndef __NOPACITY_TIMERS_H
+#define __NOPACITY_TIMERS_H
+
+#include <vdr/tools.h>
+#include <vdr/osd.h>
+#include <vdr/timers.h>
+#include "imagecache.h"
+
+class cNopacityTimer : public cListObject {
+ private:
+ cOsd *osd;
+ cImageCache *imgCache;
+ cPixmap *pixmapBackground;
+ cPixmap *pixmap;
+ cPixmap *pixmapLogo;
+ cPixmap *pixmapText;
+ const cTimer *timer;
+ int numConflicts;
+ bool isTimerConflict;
+ const cFont *font;
+ const cFont *fontLarge;
+ int width;
+ int height;
+ int y;
+ cString Date;
+ cTextWrapper showName;
+ int DrawLogo(void);
+ public:
+ cNopacityTimer(cOsd *osd, cImageCache *imgCache, const cTimer *timer, const cFont *font, const cFont *fontLarge);
+ cNopacityTimer(cOsd *osd, cImageCache *imgCache, int numConflicts, const cFont *font, const cFont *fontLarge);
+ virtual ~cNopacityTimer(void);
+ void SetGeometry(int width, int y);
+ void CreateDate(void);
+ void CreateShowName(void);
+ void CreateConflictText(void);
+ void CalculateHeight(int space);
+ void CreatePixmaps(int x);
+ void SetAlpha(int alpha);
+ void Show(void);
+ void Hide(void);
+ int GetHeight(void) {return pixmap->ViewPort().Height();}
+ void Render(void);
+};
+
+#endif //__NOPACITY_TIMERS_H
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-vdr-dvb/vdr-plugin-skinnopacity.git
More information about the pkg-vdr-dvb-changes
mailing list