diff --git a/data/cables.xml b/data/cables.xml index 3ef2d5188..b0b9f8965 100644 --- a/data/cables.xml +++ b/data/cables.xml @@ -35,6 +35,7 @@ + @@ -1337,4 +1338,23 @@ + + + + + + + + + + + + + + + + + + + diff --git a/data/icons/0.png b/data/icons/0.png index aa4949c7e..8490ecb6e 100644 Binary files a/data/icons/0.png and b/data/icons/0.png differ diff --git a/data/icons/1.png b/data/icons/1.png index 65c367603..47e031617 100644 Binary files a/data/icons/1.png and b/data/icons/1.png differ diff --git a/data/icons/16_9.png b/data/icons/16_9.png index 88a69d13f..024bfc455 100644 Binary files a/data/icons/16_9.png and b/data/icons/16_9.png differ diff --git a/data/icons/16_9_gray.png b/data/icons/16_9_gray.png index 4798861bf..b7a9bc16c 100644 Binary files a/data/icons/16_9_gray.png and b/data/icons/16_9_gray.png differ diff --git a/data/icons/2.png b/data/icons/2.png index 604c347be..c6cc719fd 100644 Binary files a/data/icons/2.png and b/data/icons/2.png differ diff --git a/data/icons/3.png b/data/icons/3.png index 72ba927f2..822081187 100644 Binary files a/data/icons/3.png and b/data/icons/3.png differ diff --git a/data/icons/4.png b/data/icons/4.png index 1ba6041a5..a51841f3b 100644 Binary files a/data/icons/4.png and b/data/icons/4.png differ diff --git a/data/icons/5.png b/data/icons/5.png index 10e39c214..8bdf034e1 100644 Binary files a/data/icons/5.png and b/data/icons/5.png differ diff --git a/data/icons/6.png b/data/icons/6.png index d9e571973..3acb8fe3a 100644 Binary files a/data/icons/6.png and b/data/icons/6.png differ diff --git a/data/icons/7.png b/data/icons/7.png index 4cac8b0b9..1f0c4c834 100644 Binary files a/data/icons/7.png and b/data/icons/7.png differ diff --git a/data/icons/8.png b/data/icons/8.png index a1a5336dd..733a71ccd 100644 Binary files a/data/icons/8.png and b/data/icons/8.png differ diff --git a/data/icons/9.png b/data/icons/9.png index 50a5f5c9b..aa720fb5c 100644 Binary files a/data/icons/9.png and b/data/icons/9.png differ diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am index 5cdd35240..66dc9a37d 100644 --- a/data/icons/Makefile.am +++ b/data/icons/Makefile.am @@ -65,6 +65,48 @@ install_DATA = \ help.png \ help_small.png \ hidden.png \ + hint_aplay.png \ + hint_audio.png \ + hint_back.png \ + hint_bedit.png \ + hint_ci.png \ + hint_dboxinfo.png \ + hint_delete.png \ + hint_extended.png \ + hint_fileplay.png \ + hint_games.png \ + hint_hdd.png \ + hint_imageinfo.png \ + hint_inetradio.png \ + hint_info.png \ + hint_keys.png \ + hint_language.png \ + hint_manage.png \ + hint_media.png \ + hint_movie.png \ + hint_network.png \ + hint_osd.png \ + hint_personalize.png \ + hint_picview.png \ + hint_protection.png \ + hint_radiomode.png \ + hint_reboot.png \ + hint_recording.png \ + hint_reload.png \ + hint_save.png \ + hint_scan.png \ + hint_scripts.png \ + hint_service.png \ + hint_settings.png \ + hint_shutdown.png \ + hint_sleeptimer.png \ + hint_streaminfo.png \ + hint_swupdate.png \ + hint_timers.png \ + hint_tvmode.png \ + hint_tvradio_switch.png \ + hint_vfd.png \ + hint_video.png \ home.png \ hungarian.png \ icon_green.png \ diff --git a/data/icons/bayrisch.png b/data/icons/bayrisch.png index e3c1b08ac..f51b90332 100644 Binary files a/data/icons/bayrisch.png and b/data/icons/bayrisch.png differ diff --git a/data/icons/biss_green.png b/data/icons/biss_green.png index 1bfcacbad..c2a638b11 100644 Binary files a/data/icons/biss_green.png and b/data/icons/biss_green.png differ diff --git a/data/icons/biss_white.png b/data/icons/biss_white.png index 1da778c21..5aa76092e 100644 Binary files a/data/icons/biss_white.png and b/data/icons/biss_white.png differ diff --git a/data/icons/biss_yellow.png b/data/icons/biss_yellow.png index 492697dda..5da432e9d 100644 Binary files a/data/icons/biss_yellow.png and b/data/icons/biss_yellow.png differ diff --git a/data/icons/blau.png b/data/icons/blau.png index 23a2c17fc..247d5d542 100644 Binary files a/data/icons/blau.png and b/data/icons/blau.png differ diff --git a/data/icons/bosanski.png b/data/icons/bosanski.png index 65da04a03..a2566a8f3 100644 Binary files a/data/icons/bosanski.png and b/data/icons/bosanski.png differ diff --git a/data/icons/btn_record_active.png b/data/icons/btn_record_active.png index d0702a94a..68abcabfe 100644 Binary files a/data/icons/btn_record_active.png and b/data/icons/btn_record_active.png differ diff --git a/data/icons/btn_record_inactive.png b/data/icons/btn_record_inactive.png index 1c89e9eaa..bcb79cb8f 100644 Binary files a/data/icons/btn_record_inactive.png and b/data/icons/btn_record_inactive.png differ diff --git a/data/icons/btn_stop.png b/data/icons/btn_stop.png index 86a874de9..fa8ceeb6a 100644 Binary files a/data/icons/btn_stop.png and b/data/icons/btn_stop.png differ diff --git a/data/icons/ca2.png b/data/icons/ca2.png index d253c6e0d..eb6b3ab86 100644 Binary files a/data/icons/ca2.png and b/data/icons/ca2.png differ diff --git a/data/icons/ca2_gray.png b/data/icons/ca2_gray.png index d4c1a5f85..32ee51233 100644 Binary files a/data/icons/ca2_gray.png and b/data/icons/ca2_gray.png differ diff --git a/data/icons/ch-baslerdeutsch.png b/data/icons/ch-baslerdeutsch.png index 43b6af0b0..72cd3ab24 100644 Binary files a/data/icons/ch-baslerdeutsch.png and b/data/icons/ch-baslerdeutsch.png differ diff --git a/data/icons/ch-berndeutsch.png b/data/icons/ch-berndeutsch.png index 28062c3f3..20a6de8c7 100644 Binary files a/data/icons/ch-berndeutsch.png and b/data/icons/ch-berndeutsch.png differ diff --git a/data/icons/conax_green.png b/data/icons/conax_green.png index 9734b837f..174d39f76 100644 Binary files a/data/icons/conax_green.png and b/data/icons/conax_green.png differ diff --git a/data/icons/conax_white.png b/data/icons/conax_white.png index 020126d10..cb0d2f5b5 100644 Binary files a/data/icons/conax_white.png and b/data/icons/conax_white.png differ diff --git a/data/icons/conax_yellow.png b/data/icons/conax_yellow.png index 3a3c3c655..96c438bde 100644 Binary files a/data/icons/conax_yellow.png and b/data/icons/conax_yellow.png differ diff --git a/data/icons/cw_green.png b/data/icons/cw_green.png index 1d00a9e89..fa51f0b54 100644 Binary files a/data/icons/cw_green.png and b/data/icons/cw_green.png differ diff --git a/data/icons/cw_white.png b/data/icons/cw_white.png index 1b2305fb0..8fdaf67ec 100644 Binary files a/data/icons/cw_white.png and b/data/icons/cw_white.png differ diff --git a/data/icons/cw_yellow.png b/data/icons/cw_yellow.png index 290aba8ef..b994a058c 100644 Binary files a/data/icons/cw_yellow.png and b/data/icons/cw_yellow.png differ diff --git a/data/icons/d_green.png b/data/icons/d_green.png index e3f13b22e..65a22d430 100644 Binary files a/data/icons/d_green.png and b/data/icons/d_green.png differ diff --git a/data/icons/d_white.png b/data/icons/d_white.png index e24c4a270..c08707692 100644 Binary files a/data/icons/d_white.png and b/data/icons/d_white.png differ diff --git a/data/icons/d_yellow.png b/data/icons/d_yellow.png index e5bcc4f24..a2ff6a70e 100644 Binary files a/data/icons/d_yellow.png and b/data/icons/d_yellow.png differ diff --git a/data/icons/dd.png b/data/icons/dd.png index c7e9dfc39..fdbe8a184 100644 Binary files a/data/icons/dd.png and b/data/icons/dd.png differ diff --git a/data/icons/dd_avail.png b/data/icons/dd_avail.png index 5be78870f..ccef9ab69 100644 Binary files a/data/icons/dd_avail.png and b/data/icons/dd_avail.png differ diff --git a/data/icons/dd_gray.png b/data/icons/dd_gray.png index bf84d0999..57453ccc5 100644 Binary files a/data/icons/dd_gray.png and b/data/icons/dd_gray.png differ diff --git a/data/icons/ddfill.png b/data/icons/ddfill.png index 03fff6c4a..88e3fc272 100644 Binary files a/data/icons/ddfill.png and b/data/icons/ddfill.png differ diff --git a/data/icons/down.png b/data/icons/down.png index e718e29ee..db4ce2538 100644 Binary files a/data/icons/down.png and b/data/icons/down.png differ diff --git a/data/icons/dutch.png b/data/icons/dutch.png index 7dba570c5..4b317aaab 100644 Binary files a/data/icons/dutch.png and b/data/icons/dutch.png differ diff --git a/data/icons/ellinika.png b/data/icons/ellinika.png index b35e40669..9ab7b0c72 100644 Binary files a/data/icons/ellinika.png and b/data/icons/ellinika.png differ diff --git a/data/icons/english.png b/data/icons/english.png index 109a10816..c0d599e88 100644 Binary files a/data/icons/english.png and b/data/icons/english.png differ diff --git a/data/icons/features.png b/data/icons/features.png index aa4e7f961..a9f3056ed 100644 Binary files a/data/icons/features.png and b/data/icons/features.png differ diff --git a/data/icons/francais.png b/data/icons/francais.png index b7529f3ae..d918b6524 100644 Binary files a/data/icons/francais.png and b/data/icons/francais.png differ diff --git a/data/icons/french.png b/data/icons/french.png index b7529f3ae..d918b6524 100644 Binary files a/data/icons/french.png and b/data/icons/french.png differ diff --git a/data/icons/gelb.png b/data/icons/gelb.png index bdb580c2b..60d18c031 100644 Binary files a/data/icons/gelb.png and b/data/icons/gelb.png differ diff --git a/data/icons/gruen.png b/data/icons/gruen.png index 29747163d..70806cdd0 100644 Binary files a/data/icons/gruen.png and b/data/icons/gruen.png differ diff --git a/data/icons/help_small.png b/data/icons/help_small.png index 59be1d994..5610f6941 100644 Binary files a/data/icons/help_small.png and b/data/icons/help_small.png differ diff --git a/data/icons/hint_aplay.png b/data/icons/hint_aplay.png index a194a34f5..f49692a12 100644 Binary files a/data/icons/hint_aplay.png and b/data/icons/hint_aplay.png differ diff --git a/data/icons/hint_audio.png b/data/icons/hint_audio.png index f1a8472e6..011e3f033 100644 Binary files a/data/icons/hint_audio.png and b/data/icons/hint_audio.png differ diff --git a/data/icons/hint_back.png b/data/icons/hint_back.png index de2875105..42fecf16f 100644 Binary files a/data/icons/hint_back.png and b/data/icons/hint_back.png differ diff --git a/data/icons/hint_bedit.png b/data/icons/hint_bedit.png index e0a92efcf..43c1eab7a 100644 Binary files a/data/icons/hint_bedit.png and b/data/icons/hint_bedit.png differ diff --git a/data/icons/hint_ci.png b/data/icons/hint_ci.png index f63b477b9..28512a0ce 100644 Binary files a/data/icons/hint_ci.png and b/data/icons/hint_ci.png differ diff --git a/data/icons/hint_dboxinfo.png b/data/icons/hint_dboxinfo.png index c40590ee8..ca657788a 100644 Binary files a/data/icons/hint_dboxinfo.png and b/data/icons/hint_dboxinfo.png differ diff --git a/data/icons/hint_delete.png b/data/icons/hint_delete.png index a7c164851..aee392425 100644 Binary files a/data/icons/hint_delete.png and b/data/icons/hint_delete.png differ diff --git a/data/icons/hint_extended.png b/data/icons/hint_extended.png index 5f550eb46..fc3e685ac 100644 Binary files a/data/icons/hint_extended.png and b/data/icons/hint_extended.png differ diff --git a/data/icons/hint_fileplay.png b/data/icons/hint_fileplay.png index b339f1311..3e5714bda 100644 Binary files a/data/icons/hint_fileplay.png and b/data/icons/hint_fileplay.png differ diff --git a/data/icons/hint_games.png b/data/icons/hint_games.png index 88e3f14f5..21964b579 100644 Binary files a/data/icons/hint_games.png and b/data/icons/hint_games.png differ diff --git a/data/icons/hint_hdd.png b/data/icons/hint_hdd.png index 6df9f1503..de51810b2 100644 Binary files a/data/icons/hint_hdd.png and b/data/icons/hint_hdd.png differ diff --git a/data/icons/hint_imageinfo.png b/data/icons/hint_imageinfo.png index d8daebc6f..1c0e1ada2 100644 Binary files a/data/icons/hint_imageinfo.png and b/data/icons/hint_imageinfo.png differ diff --git a/data/icons/hint_inetradio.png b/data/icons/hint_inetradio.png index 219e61430..8d1d8561e 100644 Binary files a/data/icons/hint_inetradio.png and b/data/icons/hint_inetradio.png differ diff --git a/data/icons/hint_info.png b/data/icons/hint_info.png index dae934d0d..3e1777aab 100644 Binary files a/data/icons/hint_info.png and b/data/icons/hint_info.png differ diff --git a/data/icons/hint_keys.png b/data/icons/hint_keys.png index 3ecb17f72..fd7b14fc8 100644 Binary files a/data/icons/hint_keys.png and b/data/icons/hint_keys.png differ diff --git a/data/icons/hint_language.png b/data/icons/hint_language.png index 88ffd2a3a..1585e8237 100644 Binary files a/data/icons/hint_language.png and b/data/icons/hint_language.png differ diff --git a/data/icons/hint_manage.png b/data/icons/hint_manage.png index a2ffa8b05..f40a4d3c5 100644 Binary files a/data/icons/hint_manage.png and b/data/icons/hint_manage.png differ diff --git a/data/icons/hint_media.png b/data/icons/hint_media.png index c60eeb923..8216861a7 100644 Binary files a/data/icons/hint_media.png and b/data/icons/hint_media.png differ diff --git a/data/icons/hint_movie.png b/data/icons/hint_movie.png index d55fba639..7c075a0b5 100644 Binary files a/data/icons/hint_movie.png and b/data/icons/hint_movie.png differ diff --git a/data/icons/hint_network.png b/data/icons/hint_network.png index b267c2345..e45cbceb2 100644 Binary files a/data/icons/hint_network.png and b/data/icons/hint_network.png differ diff --git a/data/icons/hint_osd.png b/data/icons/hint_osd.png index 48e94c323..cc22a0ebc 100644 Binary files a/data/icons/hint_osd.png and b/data/icons/hint_osd.png differ diff --git a/data/icons/hint_personalize.png b/data/icons/hint_personalize.png index 124c54ba2..10a6da125 100644 Binary files a/data/icons/hint_personalize.png and b/data/icons/hint_personalize.png differ diff --git a/data/icons/hint_picview.png b/data/icons/hint_picview.png index b46ccb940..c397432e7 100644 Binary files a/data/icons/hint_picview.png and b/data/icons/hint_picview.png differ diff --git a/data/icons/hint_protection.png b/data/icons/hint_protection.png index 85e625a1f..45b14fe1f 100644 Binary files a/data/icons/hint_protection.png and b/data/icons/hint_protection.png differ diff --git a/data/icons/hint_radiomode.png b/data/icons/hint_radiomode.png index a64afa10b..e69d52330 100644 Binary files a/data/icons/hint_radiomode.png and b/data/icons/hint_radiomode.png differ diff --git a/data/icons/hint_reboot.png b/data/icons/hint_reboot.png index fac4012be..530d6b2ed 100644 Binary files a/data/icons/hint_reboot.png and b/data/icons/hint_reboot.png differ diff --git a/data/icons/hint_recording.png b/data/icons/hint_recording.png index abf729a1b..06caf3dda 100644 Binary files a/data/icons/hint_recording.png and b/data/icons/hint_recording.png differ diff --git a/data/icons/hint_reload.png b/data/icons/hint_reload.png index ef2ec068c..28c4be4b7 100644 Binary files a/data/icons/hint_reload.png and b/data/icons/hint_reload.png differ diff --git a/data/icons/hint_save.png b/data/icons/hint_save.png index 590213f6a..a87f1bd3d 100644 Binary files a/data/icons/hint_save.png and b/data/icons/hint_save.png differ diff --git a/data/icons/hint_scan.png b/data/icons/hint_scan.png index f53467d80..36f158538 100644 Binary files a/data/icons/hint_scan.png and b/data/icons/hint_scan.png differ diff --git a/data/icons/hint_scripts.png b/data/icons/hint_scripts.png index 891402030..73f9d07ff 100644 Binary files a/data/icons/hint_scripts.png and b/data/icons/hint_scripts.png differ diff --git a/data/icons/hint_service.png b/data/icons/hint_service.png index 8201f89dc..019e0c622 100644 Binary files a/data/icons/hint_service.png and b/data/icons/hint_service.png differ diff --git a/data/icons/hint_settings.png b/data/icons/hint_settings.png index 7c4f7ce15..08c127fd0 100644 Binary files a/data/icons/hint_settings.png and b/data/icons/hint_settings.png differ diff --git a/data/icons/hint_shutdown.png b/data/icons/hint_shutdown.png index e261e7a9b..85beb4d9a 100644 Binary files a/data/icons/hint_shutdown.png and b/data/icons/hint_shutdown.png differ diff --git a/data/icons/hint_sleeptimer.png b/data/icons/hint_sleeptimer.png index e23e07c30..fa8827d9b 100644 Binary files a/data/icons/hint_sleeptimer.png and b/data/icons/hint_sleeptimer.png differ diff --git a/data/icons/hint_streaminfo.png b/data/icons/hint_streaminfo.png index cb210d621..7176488ed 100644 Binary files a/data/icons/hint_streaminfo.png and b/data/icons/hint_streaminfo.png differ diff --git a/data/icons/hint_swupdate.png b/data/icons/hint_swupdate.png index bfc557ec7..0a44a44ec 100644 Binary files a/data/icons/hint_swupdate.png and b/data/icons/hint_swupdate.png differ diff --git a/data/icons/hint_timers.png b/data/icons/hint_timers.png index 8524c1ccd..83263547b 100644 Binary files a/data/icons/hint_timers.png and b/data/icons/hint_timers.png differ diff --git a/data/icons/hint_tvmode.png b/data/icons/hint_tvmode.png index 20bc34ee0..1af243c4e 100644 Binary files a/data/icons/hint_tvmode.png and b/data/icons/hint_tvmode.png differ diff --git a/data/icons/hint_tvradio_switch.png b/data/icons/hint_tvradio_switch.png new file mode 100644 index 000000000..df84f62e2 Binary files /dev/null and b/data/icons/hint_tvradio_switch.png differ diff --git a/data/icons/hint_vfd.png b/data/icons/hint_vfd.png index 59fef12b9..36d251fe7 100644 Binary files a/data/icons/hint_vfd.png and b/data/icons/hint_vfd.png differ diff --git a/data/icons/hint_video.png b/data/icons/hint_video.png index 6c8f037b0..2bf44c01b 100644 Binary files a/data/icons/hint_video.png and b/data/icons/hint_video.png differ diff --git a/data/icons/hungarian.png b/data/icons/hungarian.png index b41feb509..683bc5a5f 100644 Binary files a/data/icons/hungarian.png and b/data/icons/hungarian.png differ diff --git a/data/icons/icon_blue.png b/data/icons/icon_blue.png index 472362c51..4c84e0bb3 100644 Binary files a/data/icons/icon_blue.png and b/data/icons/icon_blue.png differ diff --git a/data/icons/icon_green.png b/data/icons/icon_green.png index b1f073f65..5a0048fc7 100644 Binary files a/data/icons/icon_green.png and b/data/icons/icon_green.png differ diff --git a/data/icons/icon_movieplayer.png b/data/icons/icon_movieplayer.png index fa955d6b7..d116ff154 100644 Binary files a/data/icons/icon_movieplayer.png and b/data/icons/icon_movieplayer.png differ diff --git a/data/icons/icon_red.png b/data/icons/icon_red.png index 99319698e..5b473d464 100644 Binary files a/data/icons/icon_red.png and b/data/icons/icon_red.png differ diff --git a/data/icons/icon_yellow.png b/data/icons/icon_yellow.png index 237796a4b..7dee1f3b0 100644 Binary files a/data/icons/icon_yellow.png and b/data/icons/icon_yellow.png differ diff --git a/data/icons/info.png b/data/icons/info.png index 01acdecd8..712126aa2 100644 Binary files a/data/icons/info.png and b/data/icons/info.png differ diff --git a/data/icons/info_small.png b/data/icons/info_small.png index 91058600d..e7f76c991 100644 Binary files a/data/icons/info_small.png and b/data/icons/info_small.png differ diff --git a/data/icons/ird_green.png b/data/icons/ird_green.png index 7290baf97..27840a614 100644 Binary files a/data/icons/ird_green.png and b/data/icons/ird_green.png differ diff --git a/data/icons/ird_white.png b/data/icons/ird_white.png index 9b299caa6..ff5e521ae 100644 Binary files a/data/icons/ird_white.png and b/data/icons/ird_white.png differ diff --git a/data/icons/ird_yellow.png b/data/icons/ird_yellow.png index 1b21a5078..cc81a215a 100644 Binary files a/data/icons/ird_yellow.png and b/data/icons/ird_yellow.png differ diff --git a/data/icons/italiano.png b/data/icons/italiano.png index 965fca98f..e442d581e 100644 Binary files a/data/icons/italiano.png and b/data/icons/italiano.png differ diff --git a/data/icons/language.png b/data/icons/language.png index 41b0247b9..bbef95490 100644 Binary files a/data/icons/language.png and b/data/icons/language.png differ diff --git a/data/icons/left.png b/data/icons/left.png index 521c8be4e..504a1519b 100644 Binary files a/data/icons/left.png and b/data/icons/left.png differ diff --git a/data/icons/local.png b/data/icons/local.png index 76bb86970..19027c10e 100644 Binary files a/data/icons/local.png and b/data/icons/local.png differ diff --git a/data/icons/lock.png b/data/icons/lock.png index 868786dfd..318dd599d 100644 Binary files a/data/icons/lock.png and b/data/icons/lock.png differ diff --git a/data/icons/lock_passive.png b/data/icons/lock_passive.png index 4ec3bdc5f..7622dd82e 100644 Binary files a/data/icons/lock_passive.png and b/data/icons/lock_passive.png differ diff --git a/data/icons/mounted.png b/data/icons/mounted.png index 2274336f8..7be710bc9 100644 Binary files a/data/icons/mounted.png and b/data/icons/mounted.png differ diff --git a/data/icons/mp3-0.jpg b/data/icons/mp3-0.jpg index 73364958a..0bb50cb38 100644 Binary files a/data/icons/mp3-0.jpg and b/data/icons/mp3-0.jpg differ diff --git a/data/icons/mp3-1.jpg b/data/icons/mp3-1.jpg index e4826fde1..6c0294f90 100644 Binary files a/data/icons/mp3-1.jpg and b/data/icons/mp3-1.jpg differ diff --git a/data/icons/mp3-2.jpg b/data/icons/mp3-2.jpg index 079fb16df..ab1594883 100644 Binary files a/data/icons/mp3-2.jpg and b/data/icons/mp3-2.jpg differ diff --git a/data/icons/mp3-3.jpg b/data/icons/mp3-3.jpg index 420aa2324..eed32fede 100644 Binary files a/data/icons/mp3-3.jpg and b/data/icons/mp3-3.jpg differ diff --git a/data/icons/mp3-4.jpg b/data/icons/mp3-4.jpg index 5de37cf74..86ad3a372 100644 Binary files a/data/icons/mp3-4.jpg and b/data/icons/mp3-4.jpg differ diff --git a/data/icons/mp3-5.jpg b/data/icons/mp3-5.jpg index 1abefd2c2..3fa627a06 100644 Binary files a/data/icons/mp3-5.jpg and b/data/icons/mp3-5.jpg differ diff --git a/data/icons/mp3-6.jpg b/data/icons/mp3-6.jpg index 711ed9539..150aa866d 100644 Binary files a/data/icons/mp3-6.jpg and b/data/icons/mp3-6.jpg differ diff --git a/data/icons/mp3-7.jpg b/data/icons/mp3-7.jpg index 396af3556..c2bd4b5ed 100644 Binary files a/data/icons/mp3-7.jpg and b/data/icons/mp3-7.jpg differ diff --git a/data/icons/mp3.jpg b/data/icons/mp3.jpg index cb7979027..e7457c980 100644 Binary files a/data/icons/mp3.jpg and b/data/icons/mp3.jpg differ diff --git a/data/icons/mute_zap_gray.png b/data/icons/mute_zap_gray.png index 01325a527..9ba42bdcb 100644 Binary files a/data/icons/mute_zap_gray.png and b/data/icons/mute_zap_gray.png differ diff --git a/data/icons/mute_zap_green.png b/data/icons/mute_zap_green.png index df4575829..746ff165f 100644 Binary files a/data/icons/mute_zap_green.png and b/data/icons/mute_zap_green.png differ diff --git a/data/icons/nagra_green.png b/data/icons/nagra_green.png index 69b368374..7682759cb 100644 Binary files a/data/icons/nagra_green.png and b/data/icons/nagra_green.png differ diff --git a/data/icons/nagra_white.png b/data/icons/nagra_white.png index 1e7ffb135..917896a75 100644 Binary files a/data/icons/nagra_white.png and b/data/icons/nagra_white.png differ diff --git a/data/icons/nagra_yellow.png b/data/icons/nagra_yellow.png index 42500ec74..4fc908a32 100644 Binary files a/data/icons/nagra_yellow.png and b/data/icons/nagra_yellow.png differ diff --git a/data/icons/nederlands.png b/data/icons/nederlands.png index 109da2313..248996c3e 100644 Binary files a/data/icons/nederlands.png and b/data/icons/nederlands.png differ diff --git a/data/icons/norsk.png b/data/icons/norsk.png index a04427019..cfb143e7b 100644 Binary files a/data/icons/norsk.png and b/data/icons/norsk.png differ diff --git a/data/icons/not_mounted.png b/data/icons/not_mounted.png index abb294e0f..b394ba62b 100644 Binary files a/data/icons/not_mounted.png and b/data/icons/not_mounted.png differ diff --git a/data/icons/notyet.png b/data/icons/notyet.png index 314e33e28..c22f319c3 100644 Binary files a/data/icons/notyet.png and b/data/icons/notyet.png differ diff --git a/data/icons/numericpad.png b/data/icons/numericpad.png index 94b61c2b1..101b57842 100644 Binary files a/data/icons/numericpad.png and b/data/icons/numericpad.png differ diff --git a/data/icons/personalize.png b/data/icons/personalize.png index b067dbc06..4f9333ccc 100644 Binary files a/data/icons/personalize.png and b/data/icons/personalize.png differ diff --git a/data/icons/polski.png b/data/icons/polski.png index 2afcc3a2d..6e728b8c5 100644 Binary files a/data/icons/polski.png and b/data/icons/polski.png differ diff --git a/data/icons/portugues.png b/data/icons/portugues.png index 36b621e82..02065e92a 100644 Binary files a/data/icons/portugues.png and b/data/icons/portugues.png differ diff --git a/data/icons/power.png b/data/icons/power.png index 9520a99d5..2f7da6ae8 100644 Binary files a/data/icons/power.png and b/data/icons/power.png differ diff --git a/data/icons/powervu_green.png b/data/icons/powervu_green.png index 3fcfb7693..9380eea95 100644 Binary files a/data/icons/powervu_green.png and b/data/icons/powervu_green.png differ diff --git a/data/icons/powervu_white.png b/data/icons/powervu_white.png index 1d7eced5f..07c4c8d5a 100644 Binary files a/data/icons/powervu_white.png and b/data/icons/powervu_white.png differ diff --git a/data/icons/powervu_yellow.png b/data/icons/powervu_yellow.png index bda2b3f01..6e95a8d9c 100644 Binary files a/data/icons/powervu_yellow.png and b/data/icons/powervu_yellow.png differ diff --git a/data/icons/radio.jpg b/data/icons/radio.jpg index 0113c51ea..4a9072c53 100644 Binary files a/data/icons/radio.jpg and b/data/icons/radio.jpg differ diff --git a/data/icons/radiomode.jpg b/data/icons/radiomode.jpg index e09002e45..7dff6838e 100644 Binary files a/data/icons/radiomode.jpg and b/data/icons/radiomode.jpg differ diff --git a/data/icons/radiotextget.png b/data/icons/radiotextget.png index dae4678c8..7948c469d 100644 Binary files a/data/icons/radiotextget.png and b/data/icons/radiotextget.png differ diff --git a/data/icons/radiotextoff.png b/data/icons/radiotextoff.png index 22ceffa4e..e59953da0 100644 Binary files a/data/icons/radiotextoff.png and b/data/icons/radiotextoff.png differ diff --git a/data/icons/radiotextwait.png b/data/icons/radiotextwait.png index 6f05d463b..5bf8d6076 100644 Binary files a/data/icons/radiotextwait.png and b/data/icons/radiotextwait.png differ diff --git a/data/icons/rec_event_marker.png b/data/icons/rec_event_marker.png index 73eee96f8..b2d10d404 100644 Binary files a/data/icons/rec_event_marker.png and b/data/icons/rec_event_marker.png differ diff --git a/data/icons/res_000.png b/data/icons/res_000.png index e291a796c..0c69fd74a 100644 Binary files a/data/icons/res_000.png and b/data/icons/res_000.png differ diff --git a/data/icons/res_1080.png b/data/icons/res_1080.png index 08ff896c8..072c55929 100644 Binary files a/data/icons/res_1080.png and b/data/icons/res_1080.png differ diff --git a/data/icons/res_1280.png b/data/icons/res_1280.png index 3361714af..c75519a8d 100644 Binary files a/data/icons/res_1280.png and b/data/icons/res_1280.png differ diff --git a/data/icons/res_1440.png b/data/icons/res_1440.png index 1aca51873..cbddf2ea0 100644 Binary files a/data/icons/res_1440.png and b/data/icons/res_1440.png differ diff --git a/data/icons/res_1920.png b/data/icons/res_1920.png index d7dcf931a..34c4f819a 100644 Binary files a/data/icons/res_1920.png and b/data/icons/res_1920.png differ diff --git a/data/icons/res_288.png b/data/icons/res_288.png index aed89243a..48adf4762 100644 Binary files a/data/icons/res_288.png and b/data/icons/res_288.png differ diff --git a/data/icons/res_352.png b/data/icons/res_352.png index 8268baa2f..e4950b81e 100644 Binary files a/data/icons/res_352.png and b/data/icons/res_352.png differ diff --git a/data/icons/res_382.png b/data/icons/res_382.png index af33cb39e..4e546e7ca 100644 Binary files a/data/icons/res_382.png and b/data/icons/res_382.png differ diff --git a/data/icons/res_480.png b/data/icons/res_480.png index d256eb04b..7cb2c1bbc 100644 Binary files a/data/icons/res_480.png and b/data/icons/res_480.png differ diff --git a/data/icons/res_528.png b/data/icons/res_528.png index ef9575b3b..2efc99547 100644 Binary files a/data/icons/res_528.png and b/data/icons/res_528.png differ diff --git a/data/icons/res_544.png b/data/icons/res_544.png index 8159aac74..75c5338c0 100644 Binary files a/data/icons/res_544.png and b/data/icons/res_544.png differ diff --git a/data/icons/res_576.png b/data/icons/res_576.png index 5201da738..4e68aa9fd 100644 Binary files a/data/icons/res_576.png and b/data/icons/res_576.png differ diff --git a/data/icons/res_704.png b/data/icons/res_704.png index f13b1a52f..8d0069e86 100644 Binary files a/data/icons/res_704.png and b/data/icons/res_704.png differ diff --git a/data/icons/res_720.png b/data/icons/res_720.png index 329716fb9..e806d1d74 100644 Binary files a/data/icons/res_720.png and b/data/icons/res_720.png differ diff --git a/data/icons/right.png b/data/icons/right.png index 354fb8f1a..8b06d6bb1 100644 Binary files a/data/icons/right.png and b/data/icons/right.png differ diff --git a/data/icons/romania.png b/data/icons/romania.png index a079ca74b..99f0db0e6 100644 Binary files a/data/icons/romania.png and b/data/icons/romania.png differ diff --git a/data/icons/rot.png b/data/icons/rot.png index a835f4586..6b5acc916 100644 Binary files a/data/icons/rot.png and b/data/icons/rot.png differ diff --git a/data/icons/russkij.png b/data/icons/russkij.png index fffac38b7..caacac067 100644 Binary files a/data/icons/russkij.png and b/data/icons/russkij.png differ diff --git a/data/icons/scan.jpg b/data/icons/scan.jpg index c0309d561..e0c8faa95 100644 Binary files a/data/icons/scan.jpg and b/data/icons/scan.jpg differ diff --git a/data/icons/seca_green.png b/data/icons/seca_green.png index ae253b633..b71a9254b 100644 Binary files a/data/icons/seca_green.png and b/data/icons/seca_green.png differ diff --git a/data/icons/seca_white.png b/data/icons/seca_white.png index 416b65ce9..2ba599d03 100644 Binary files a/data/icons/seca_white.png and b/data/icons/seca_white.png differ diff --git a/data/icons/seca_yellow.png b/data/icons/seca_yellow.png index de6a2fc46..365111aa9 100644 Binary files a/data/icons/seca_yellow.png and b/data/icons/seca_yellow.png differ diff --git a/data/icons/shutdown.jpg b/data/icons/shutdown.jpg index 4831422df..4c0c0bbf9 100644 Binary files a/data/icons/shutdown.jpg and b/data/icons/shutdown.jpg differ diff --git a/data/icons/softupdate.png b/data/icons/softupdate.png index e469f3494..83e0ed36e 100644 Binary files a/data/icons/softupdate.png and b/data/icons/softupdate.png differ diff --git a/data/icons/start.jpg b/data/icons/start.jpg index b5ebeff90..a980916e7 100644 Binary files a/data/icons/start.jpg and b/data/icons/start.jpg differ diff --git a/data/icons/subt.png b/data/icons/subt.png index 33b0b0f2d..cf2cec1ab 100644 Binary files a/data/icons/subt.png and b/data/icons/subt.png differ diff --git a/data/icons/subt_gray.png b/data/icons/subt_gray.png index 581a52c08..71edc56c3 100644 Binary files a/data/icons/subt_gray.png and b/data/icons/subt_gray.png differ diff --git a/data/icons/suomi.png b/data/icons/suomi.png index 1a48e4dc3..98f064eb7 100644 Binary files a/data/icons/suomi.png and b/data/icons/suomi.png differ diff --git a/data/icons/svenska.png b/data/icons/svenska.png index b7c5f77ad..2711ed979 100644 Binary files a/data/icons/svenska.png and b/data/icons/svenska.png differ diff --git a/data/icons/tuner_1.png b/data/icons/tuner_1.png index 41cc06b5f..27f599886 100644 Binary files a/data/icons/tuner_1.png and b/data/icons/tuner_1.png differ diff --git a/data/icons/tuner_2.png b/data/icons/tuner_2.png index 7749a9993..af38d4ad8 100644 Binary files a/data/icons/tuner_2.png and b/data/icons/tuner_2.png differ diff --git a/data/icons/up.png b/data/icons/up.png index 7f92806ff..d18f6fa30 100644 Binary files a/data/icons/up.png and b/data/icons/up.png differ diff --git a/data/icons/upnp.png b/data/icons/upnp.png index 94ee9d5bd..872694601 100644 Binary files a/data/icons/upnp.png and b/data/icons/upnp.png differ diff --git a/data/icons/via_green.png b/data/icons/via_green.png index 5a3117f65..96423c79b 100644 Binary files a/data/icons/via_green.png and b/data/icons/via_green.png differ diff --git a/data/icons/via_white.png b/data/icons/via_white.png index ed2529236..c0b0a7d2b 100644 Binary files a/data/icons/via_white.png and b/data/icons/via_white.png differ diff --git a/data/icons/via_yellow.png b/data/icons/via_yellow.png index 72674b085..7234c6ee6 100644 Binary files a/data/icons/via_yellow.png and b/data/icons/via_yellow.png differ diff --git a/data/icons/volume.png b/data/icons/volume.png index c03406665..985a013ea 100644 Binary files a/data/icons/volume.png and b/data/icons/volume.png differ diff --git a/data/icons/volumebody.png b/data/icons/volumebody.png index c921998b3..3ba8dd13e 100644 Binary files a/data/icons/volumebody.png and b/data/icons/volumebody.png differ diff --git a/data/icons/volumeslider2.png b/data/icons/volumeslider2.png index 4e88bd0e9..051915adb 100644 Binary files a/data/icons/volumeslider2.png and b/data/icons/volumeslider2.png differ diff --git a/data/icons/volumeslider2alpha.png b/data/icons/volumeslider2alpha.png index 09db880eb..5916c9084 100644 Binary files a/data/icons/volumeslider2alpha.png and b/data/icons/volumeslider2alpha.png differ diff --git a/data/icons/volumeslider2blue.png b/data/icons/volumeslider2blue.png index 624922582..a8ac4394a 100644 Binary files a/data/icons/volumeslider2blue.png and b/data/icons/volumeslider2blue.png differ diff --git a/data/icons/volumeslider2green.png b/data/icons/volumeslider2green.png index 45cc36f84..5c53fc879 100644 Binary files a/data/icons/volumeslider2green.png and b/data/icons/volumeslider2green.png differ diff --git a/data/icons/volumeslider2red.png b/data/icons/volumeslider2red.png index 7055d87be..3a929c202 100644 Binary files a/data/icons/volumeslider2red.png and b/data/icons/volumeslider2red.png differ diff --git a/data/icons/vtxt.png b/data/icons/vtxt.png index 23c84645c..30902f56a 100644 Binary files a/data/icons/vtxt.png and b/data/icons/vtxt.png differ diff --git a/data/icons/vtxt_gray.png b/data/icons/vtxt_gray.png index 128c14c24..11e12e1e6 100644 Binary files a/data/icons/vtxt_gray.png and b/data/icons/vtxt_gray.png differ diff --git a/data/icons/x_green.png b/data/icons/x_green.png index babb51ee0..6eff02b8c 100644 Binary files a/data/icons/x_green.png and b/data/icons/x_green.png differ diff --git a/data/icons/x_white.png b/data/icons/x_white.png index 827901bfb..ab3bbdd74 100644 Binary files a/data/icons/x_white.png and b/data/icons/x_white.png differ diff --git a/data/icons/x_yellow.png b/data/icons/x_yellow.png index 5ef02b578..39843e345 100644 Binary files a/data/icons/x_yellow.png and b/data/icons/x_yellow.png differ diff --git a/data/lcd/icons/lcd2.png b/data/lcd/icons/lcd2.png index 27c8a4ee7..47baf5153 100644 Binary files a/data/lcd/icons/lcd2.png and b/data/lcd/icons/lcd2.png differ diff --git a/data/lcd/icons/power.png b/data/lcd/icons/power.png index a3667e75c..7f331916a 100644 Binary files a/data/lcd/icons/power.png and b/data/lcd/icons/power.png differ diff --git a/data/locale/Makefile.am b/data/locale/Makefile.am index dde025d60..50d9e1356 100644 --- a/data/locale/Makefile.am +++ b/data/locale/Makefile.am @@ -21,28 +21,35 @@ install_DATA = \ if MAINTAINER_MODE -locals: locals.h locals_intern.h +locals: sort-locals locals.h locals_intern.h install-locals -ordercheck: deutsch.locale - cut -d' ' -f1 deutsch.locale | LC_ALL=C sort | uniq > /tmp/log - cut -d' ' -f1 deutsch.locale | uniq | diff - /tmp/log || \ +sort-locals: $(top_srcdir)/data/locale/deutsch.locale $(top_srcdir)/data/locale/english.locale + cat $(top_srcdir)/data/locale/deutsch.locale | LC_ALL=C sort | uniq > deutsch.locale + cat $(top_srcdir)/data/locale/english.locale | LC_ALL=C sort | uniq > english.locale + cp -f deutsch.locale english.locale $(top_srcdir)/data/locale + +ordercheck: $(top_srcdir)/data/locale/deutsch.locale + cut -d' ' -f1 $(top_srcdir)/data/locale/deutsch.locale | LC_ALL=C sort | uniq > /tmp/log + cut -d' ' -f1 $(top_srcdir)/data/locale/deutsch.locale | uniq | diff - /tmp/log || \ (echo "ERROR: deutsch.locale not ordered or contains empty lines" && false) -locals.h: ordercheck deutsch.locale - cut -d' ' -f1 deutsch.locale | LC_ALL=C sort | uniq | tr [:lower:] [:upper:] | tr \. \_ | tr \- \_ | tr -d \? | ./create.locals.h +locals.h: ordercheck $(top_srcdir)/data/locale/deutsch.locale + cut -d' ' -f1 $(top_srcdir)/data/locale/deutsch.locale | LC_ALL=C sort | uniq | tr [:lower:] [:upper:] | tr \. \_ | tr \- \_ | tr -d \? | $(top_srcdir)/data/locale/create.locals.h -locals_intern.h: ordercheck deutsch.locale - cut -d' ' -f1 deutsch.locale | LC_ALL=C sort | uniq | ./create.locals_intern.h +locals_intern.h: ordercheck $(top_srcdir)/data/locale/deutsch.locale + cut -d' ' -f1 $(top_srcdir)/data/locale/deutsch.locale | LC_ALL=C sort | uniq | $(top_srcdir)/data/locale/create.locals_intern.h check: locals.h locals_intern.h - diff locals.h ../../src/system - diff locals_intern.h ../../src/system + diff locals.h $(top_srcdir)/src/system + diff locals_intern.h $(top_srcdir)/src/system install-locals: locals.h locals_intern.h - cp locals.h locals_intern.h ../../src/system - @echo "Consider committing .../neutrino/src/system/[locals.h,locals_intern.h]" + cp locals.h locals_intern.h $(top_srcdir)/src/system + @echo "Consider committing src/system/[locals.h,locals_intern.h]" + cp -f deutsch.locale english.locale $(top_srcdir)/data/locale + @echo "Consider committing data/locale/[deutsch.locale,english.locale]" locals-clean: - rm -f locals.h locals_intern.h + rm -f locals.h locals_intern.h deutsch.locale english.locale endif diff --git a/data/locale/_readme.txt b/data/locale/_readme.txt index 97044e9d4..cd4366866 100644 --- a/data/locale/_readme.txt +++ b/data/locale/_readme.txt @@ -28,36 +28,35 @@ How do I add a new locale string? --------------------------------- 1.) First of all, add the new string to deutsch.locale while preserving -the ordering. Do not add any empty lines. Use `make ordercheck' to for -verification. +the ordering. Do not add any empty lines. 2.) -Enter the directory apps/tuxbox/neutrino/data/locale. +Enter the directory build_tmp/neutrino-hd/data/locale. 3.) -Create new versions of the files apps/tuxbox/neutrino/src/system/locals.h -and apps/tuxbox/neutrino/src/system/locals_intern.h -using the command `make locals.h locals_intern.h'. +Use for sorting (deutsch.locale,english.locale) 'make sort-locals', use 'make ordercheck' to for +verification. 4.) -Check the modifications with `make check', or with -diff locals.h ../../src/system/locals.h -diff locals_intern.h ../../src/system/locals_intern.h +Create new versions of the files src/system/locals.h and src/system/locals_intern.h +using the command 'make locals.h locals_intern.h'. 5.) -Copy the replacement file to their destination with `make install-locals', -or with -cp -p locals.h ../../src/system/locals.h -cp -p locals_intern.h ../../src/system/locals_intern.h +Check the modifications with 'make check' 6.) +Copy the replacement file to their destination with 'make install-locals' + +7.) +Or use for item 3-6 'make locals' + +8.) To the extent possible, update other locale file. For this, the Perl-script create-locals-update.pl may be useful. -7.) -If committing the changes to CVS, commit both the involved -locale-files, apps/tuxbox/neutrino/src/system/locals.h, and -as apps/tuxbox/neutrino/src/system/locals_intern.h. +9.) +If committing the changes to Git, commit both the involved +locale-files, src/system/locals.h, and src/system/locals_intern.h. Useful tools: ------------- diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 4afdc021a..d09ead308 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -113,7 +113,7 @@ audiomenu.avsync A/V sync audiomenu.avsync_am Audio master audiomenu.clockrec audiomenu.dolbydigital DD-Unterkanal automatisch -audiomenu.hdmi_dd DolbyDigital über HDMI +audiomenu.hdmi_dd Dolby Digital über HDMI audiomenu.hdmi_dd_auto automatisch audiomenu.hdmi_dd_force erzwingen audiomenu.monoleft mono links @@ -123,7 +123,7 @@ audiomenu.pref_lang_head Tonwahl audiomenu.pref_languages Bevorzugte Sprachen audiomenu.pref_subs Sprache audiomenu.pref_subs_head Untertitelwahl -audiomenu.spdif_dd DolbyDigital über S/PDIF +audiomenu.spdif_dd Dolby Digital über S/PDIF audiomenu.stereo stereo audiomenu.volume_step Lautstärke Schrittweite audioplayer.add Hinzufügen @@ -259,7 +259,7 @@ colormenusetup.menucontent Fensterinhalt colormenusetup.menucontent_inactive Fensterinhalt deaktiviert colormenusetup.menucontent_selected Fensterinhalt selektiert colormenusetup.menuhead Titelleiste -colorstatusbar.text Statusbalken +colorstatusbar.text Infobar colorthememenu.head Theme auswählen colorthememenu.head2 Themes laden colorthememenu.name Themename @@ -299,6 +299,7 @@ epgextended.presenter Moderator epgextended.year_of_production Produktionsjahr epglist.noevents Keine EPG-Information verfügbar. epgviewer.More_Screenings Weitere Termine auf diesem Kanal +epgviewer.More_Screenings_short Weitere Termine epgviewer.nodetailed Keine ausführlichen Informationen verfügbar epgviewer.notfound Keine Programminformationen (EPG) gefunden eventfinder.head EPG-Suche @@ -391,6 +392,7 @@ extra.tp_pol_r R extra.tp_rate Symbolrate extra.update_dir Lokales Update-Verzeichnis extra.use_gotoxx Benutze gotoXX +extra.volume_digits Lautstärkeanzeige Ziffern extra.volume_pos Lautstärkeanzeige extra.west Westen extra.zap_cycle Zap nur in Bouquet @@ -434,7 +436,8 @@ filesystem.is.utf8.option.utf8 UTF-8 flashupdate.actionreadflash lese Flash flashupdate.cantopenfile kann Datei nicht öffnen flashupdate.cantopenmtd kann das MTD-Device nicht öffnen -flashupdate.checkupdate Nach Updates suchen +flashupdate.checkupdate_internet Online nach Updates suchen +flashupdate.checkupdate_local Lokales Update flashupdate.currentversion_sep Installierte Version flashupdate.currentversiondate Datum flashupdate.currentversiontime Uhrzeit @@ -521,6 +524,7 @@ fontsize.infobar_info Info fontsize.infobar_number Nummer fontsize.infobar_small Klein fontsize.menu Menütext +fontsize.menu_hint Menü-Hilfe fontsize.menu_info Menüinfo fontsize.menu_title Menütitel hdd_10min 10 min. @@ -605,7 +609,7 @@ keybindingmenu.poweroff Standby EIN/AUS keybindingmenu.quickzap Schnellumschaltung keybindingmenu.remotecontrol_hardware Hardware keybindingmenu.remotecontrol_hardware_coolstream Coolstream -keybindingmenu.remotecontrol_hardware_dbox d-box Nokia (alt) +keybindingmenu.remotecontrol_hardware_dbox DBox Nokia (alt) keybindingmenu.remotecontrol_hardware_msg_part1 Die Fernbedienung wurde von ' keybindingmenu.remotecontrol_hardware_msg_part2 ' auf ' keybindingmenu.remotecontrol_hardware_msg_part3 ' geändert.\nIst dies korrekt?\nBitte die Auswahl innerhalb 15 Sekunden mit der neuen Fernbedienung\nbestätigen. Ansonsten wird die Auswahl zurückgesetzt. @@ -687,6 +691,376 @@ mainsettings.timezone Zeitzone mainsettings.video Video menu.back Zurück menu.cancel Abbrechen +menu.hint_a_pic Konfigurieren Sie den Audioplayer und Bildbetrachter +menu.hint_aplay Audioplayer +menu.hint_audio Audio-Ausgang, Dolby Digital\nund SRS True Volume Optionen +menu.hint_audio_analog_mode Hier wird festgelegt, ob auf dem analogen Ausgang ein Stereo-,\nMono-Links- oder Mono-Rechts-Signal ausgegeben werden soll +menu.hint_audio_avsync Diese Funktion synchronisiert Bild und Ton +menu.hint_audio_dd Ist diese Option auf ein, wird automatisch auf Dolby Digital Ton\numgeschaltet, sobald dieser bei einem Sender verfügbar ist +menu.hint_audio_hdmi_dd Bei aktiver Option wird über den HDMI-Ausgang\nDolby Digital Ton ausgegeben +menu.hint_audio_spdif_dd Bei aktiver Option wird über den optischen Ausgang\n(S/PDIF) Dolby Digital Ton ausgegeben +menu.hint_audio_srs Hier wird SRS TruVolume an oder abgeschaltet\nbei inhaltlichen Änderungen +menu.hint_audio_srs_algo Mögliche Betriebsarten, einfach oder normal +menu.hint_audio_srs_nmgr Schaltet diese Option an oder aus +menu.hint_audio_srs_volume Hier kann die Referenzlautstärke festgelegt werden +menu.hint_audio_volstep Beim Betätigen der Lautstärketasten wird die Lautstärke\nimmer schrittweise nach diesen Wert geändert +menu.hint_audioplayer_defdir Hier wählen Sie das Startverzeichnis für den Audioplayer +menu.hint_audioplayer_follow Das Selektieren eines aktuellen Titel in der Playliste zulassen +menu.hint_audioplayer_highprio Erhöhen Sie die Priorität der Wiedergabe +menu.hint_audioplayer_order Ändern der Playlist-Sortierreihenfolge +menu.hint_audioplayer_playlist Aktiviert die Anzeige der Titel in der Playliste +menu.hint_audioplayer_repeat Aktiviert die Wiederholung der Playliste,\nwenn das Ende der Liste erreicht ist +menu.hint_audioplayer_sc_metadata Aktiviert das Anzeigen der Audio-Metadaten +menu.hint_audioplayer_screensaver Aktiviert den Bildschirmschoner in Minuten +menu.hint_audioplayer_title Aktivieren Sie die Titelsuche (SMS-Stil) in der Playliste +menu.hint_auto_lang Hier können Sie wählen, ob automatisch Ihre bevorzugte Tonspur gewählt wird,\nwenn vorhanden +menu.hint_auto_subs Automatische Anzeige der Untertitel in Ihrer bevorzugten Sprache +menu.hint_back Zurück zum vorherigen Menü,\ndrücken der Menütaste schließt alle Menüs +menu.hint_backup Sichern von Konfigurationen und Kanallisten +menu.hint_bedit Bearbeiten der Favoriten und der Bouquets +menu.hint_bigwindows EPG Informationen werden immer im großen Fenster angezeigt,\ndies erreichen Sie auch mit der 'Info' Taste +menu.hint_cache_txt Startet das Zwischenspeichern des Teletext nach\nKanalwechsel +menu.hint_cec_mode CEC-Modus +menu.hint_cec_standby CEC-Standby +menu.hint_cec_view_on CEC view ON +menu.hint_channellist_colored Definiert ob die aktuelle oder nächste Sendung in einer anderen Farbe dargestellt werden soll +menu.hint_channellist_epg_align Hier kann man festlegen, wie der Text für das EPG in der Liste\nrechts vom Programmnamen ausgerichtet wird +menu.hint_channellist_extended Bei aktivierter Funktion wird vor dem Sendernamen ein Balken eingeblendet,\nder den Sendungsfortschritt anzeigt +menu.hint_channellist_fonts Ändern Sie in der Kanalliste die Schriftgrößen +menu.hint_channellist_foot Definiert welche Informationen im unteren Sendungsfenster angezeigt werden sollen +menu.hint_channellist_setup Hier können Sie Anzeigeoptionen für die Kanalliste auswählen +menu.hint_ci Conditional-Access-Menü zum Einrichten\nIhres CI-Moduls oder der eingebetteten Conax-Karte +menu.hint_colors Konfigurieren Sie die Menü-Farben +menu.hint_content_back Ändern Sie die Hintergrundfarbe für den Fensterinhalt +menu.hint_content_textcolor Ändern Sie die Textfarbe für den Fensterinhalt +menu.hint_contrast_fonts Wählen Sie mehr Schriftkontrast (absetzen vom Hintergrund) +menu.hint_dboxinfo Informationen über CPU und Arbeitsspeicher der Box +menu.hint_delete_channels Löschen aller Kanäle +menu.hint_epg_cache Maximum in Tagen zukünftiger EPG-Daten +menu.hint_epg_dir Speicherverzeichnis auf der Festplatte oder einen USB-Stick\nzum speichern von EPG-Daten +menu.hint_epg_extendedcache Maximum in Stunden, die die EPG-Daten zwischengespeichert\nwerden bzw. der Event-Beschreibungen +menu.hint_epg_fonts Ändern Sie für die EPG-Details die Schriftgrößen +menu.hint_epg_max_events Maximum an Events im Zwischenspeicher. Nach Erreichen der\nGrenze werden EPG-Daten für zukünftige gelöscht +menu.hint_epg_old_events EPG im Speicher behalten in Stunden,\nauch wenn es veraltet ist +menu.hint_epg_save Speichert die EPG-Daten auf einer Harddisk oder USB-Stick\nund läd es nach einen Neustart +menu.hint_event_textcolor Ändern Sie die Event-Farbe für farbige Event-Optionen in Kanalliste und Infobar +menu.hint_eventlist_fonts Ändern Sie in der Event-Liste die Schriftgrößen +menu.hint_extended Energiespar-, EPG-Speicher- / Lade-Optionen,\nHDMI-CEC, Startkanal, Zap-Optionen +menu.hint_factory Zurücksetzen der Box auf Werkseinstellungen\nBox wird nach einem Reset neu gestartet +menu.hint_fade Bei aktivierter Funktion werden die Menüfenster\n'weich' ein- bzw. ausgeblendet +menu.hint_fan_speed Steuerung der Lüftergeschwindigkeit für die CPU +menu.hint_filebrowser_denydirectoryleave Verhindert das Verlassen des Startverzeichnisses +menu.hint_filebrowser_showrights Anzeige der Dateirechte der Dateien im Filebrowser +menu.hint_fileplay Spielen Sie verschiedene Video-Dateien +menu.hint_filesystem_is_utf8 Kodierung für Unicode-Zeichen im Filebrowser +menu.hint_font_gui Wählen Sie die Schriftart aus Schriftart-Dateien, um diese für die Menüs zu verwenden +menu.hint_font_scaling Legen Sie global die vertikale und horizontale Skalierung der Menüschrift fest +menu.hint_font_ttx Wählen Sie Schriftart aus Schriftart-Dateien, um diese für den Teletext zu verwenden +menu.hint_fonts Konfigurieren Sie die Menü-Schriftart und Schriftgrößen +menu.hint_gamelist_fonts Ändern Sie für die Spiele- und Script-Liste die Schriftgrößen +menu.hint_games Zeige Liste der installierten Spiele +menu.hint_hdd Formatierung und Prüfung der Festplatte +menu.hint_hdd_apply Die veränderten Einstellungen zum Sleep- und Akustik-Modus werden übernommen +menu.hint_hdd_check Überprüft das Dateisystem und führt gegebenfalls eine Reparatur durch (fsck) +menu.hint_hdd_format Erstellt eine HDD-Partition und formatiert diese +menu.hint_hdd_noise Hier können Parameter für Automatic Acoustic Management gesetzt werden,\nnicht alle Laufwerke unterstützen diese Funktion +menu.hint_hdd_sleep Dieser Wert definiert nach wie viel Minuten die Festplatte bei Inaktivität in den Sleep-Modus geschaltet wird +menu.hint_hdd_tools Hier können Sie die gefundenen Festplatten formatieren bzw. das Dateisystem überprüfen +menu.hint_head_back Ändern Sie die Titel-Hintergrundfarbe +menu.hint_head_textcolor Ändern Sie die Titel-Textfarbe +menu.hint_imageinfo Informationen über die installierte Software +menu.hint_inact_timer Ausschalten der Box nach Inaktivität in Minuten,\ndie Box geht automatisch in den Deep-Standby +menu.hint_inactive_back Ändern Sie die Hintergrundfarbe für deaktivierte Fensterinhalte +menu.hint_inactive_textcolor Ändern Sie die Textfarbe für deaktivierte Fensterinhalte +menu.hint_inet_radio Internetradio +menu.hint_info Informationen über Image, CPU und Arbeitsspeicher,\nStream-Information +menu.hint_infobar_back Ändern Sie die Hintergrundfarbe für die Infobar +menu.hint_infobar_casys ein: zeigt alle Aktiven farbig, Mini: einzelnes Symbol ob gespeert, Diskret: alle Aktiven CA-Systeme +menu.hint_infobar_colored_event Verwenden Sie unterschiedliche Farben für die aktuelle oder nächste Sendung in der Infobar +menu.hint_infobar_dd Zeigt ein Dolby Digital Icon bei Verfügbarkeit +menu.hint_infobar_filesys Zeigen den vom Flash- und einer HDD verwendeten Speicherplatz +menu.hint_infobar_fonts Ändern Sie in der Infobar die Schriftgrößen +menu.hint_infobar_logo Logo- und Signal-Optionen +menu.hint_infobar_logo_dir Hier wählen Sie das Verzeichnis für die Senderlogos +menu.hint_infobar_on_epg Zeigt einen Hinweis bei EPG-Änderungen +menu.hint_infobar_radiotext Zeigt Radiotext in einen Fenster, wenn verfügbar +menu.hint_infobar_res Zeige die gesendete Auflösung in Symbolen +menu.hint_infobar_sat Zeigt die aktuellen Satelliten- oder Kabel-Provider +menu.hint_infobar_setup Hier können Sie die Anzeigeoptionen für die Infobar auswählen +menu.hint_infobar_textcolor Ändern Sie die Textfarbe für die Infobar +menu.hint_infobar_tuner Zeigt den aktiven Tuner als Nummernicon +menu.hint_keep_numbers Mit der Aktivierung werden den Sendern feste/dauerhafte\nKanalnummern zugewiesen +menu.hint_key_addrecord Weisen Sie eine Taste für das starten und makieren von Aufnahmen im EPG zu +menu.hint_key_addremind Weisen Sie eine Taste für das Umschalten im EPG über den Timer zu +menu.hint_key_audio ein: 'Audio' Taste startet das Audioplayer-Menü\naus: 'Audio' Taste startet die Auswahl der Tonspuren +menu.hint_key_binding In diesem Menü können Einstellungen für die Tasten der Fernbedienung angepasst werden +menu.hint_key_bouquetdown Weisen Sie eine Taste für das zurückblättern in den Bouquet zu +menu.hint_key_bouquetup Weisen Sie eine Taste für das vorblättern in den Bouquet zu +menu.hint_key_cancel Weisen Sie eine Taste für das schließen der Menüe zu +menu.hint_key_channel_sms Wenn es aktiviert ist, können Sie die Nummern-Tasten in der Kanalliste nutzen,\num im SMS-Style zu suchen +menu.hint_key_channeldown Weisen Sie eine Taste für das runterschalten in der Kanalliste zu +menu.hint_key_channellist Konfigurieren Sie die Tastenbelegung für die Kanalliste +menu.hint_key_channelup Weisen Sie eine Taste für das hochschalten in der Kanalliste zu +menu.hint_key_hardware Hier wird definiert welchen Fernbedienungstyp Sie verwenden möchten,\ndie Bestätigung erfolgt mit der Ausgewählten +menu.hint_key_history Hier können Sie eine Taste für das Anzeigen der letzten Programme,\ndie Sie schauten definieren (History-Liste) +menu.hint_key_lastchannel Hier können Sie eine Taste definieren, der in den letzten Kanal zurückschaltet aus der History-Liste +menu.hint_key_left_exit Weisen Sie der 'links' Taste für das wechseln in den Menüe zu +menu.hint_key_list_end Weisen Sie eine Taste für den Wechsel zum 'Listenende' zu +menu.hint_key_list_start Weisen Sie eine Taste für den Wechsel zum 'Listenanfang' zu +menu.hint_key_load Laden Sie definierte Tastenbelegungen aus einer Datei +menu.hint_key_modechange Wählen Sie eine Taste für den wechseln in den TV/Radio Modus und für den Standby +menu.hint_key_movieplayer Konfigurieren Sie die Tastenbelegung für den Movieplayer +menu.hint_key_mpaudio Weisen Sie eine Taste zu um die Tonspuren in ihren Aufnahmen zu wechseln +menu.hint_key_mpbookmark Weisen Sie eine Taste um 'Merker' in ihren Aufnahmen für den Neustart zu setzen +menu.hint_key_mpforward Weisen Sie eine Taste zum vorspulen in ihren Aufnahmen zu +menu.hint_key_mppause Weisen Sie eine Taste zum pausieren der Wiedergabe zu +menu.hint_key_mpplay Weisen Sie eine Taste zu, um die Wiedergabe zu starten +menu.hint_key_mpplugin Weisen Sie eine Taste zu um ein Plugin zu starten,\nwenn ihre Wiedergabe läuft +menu.hint_key_mprewind Weisen Sie eine Taste zum zurückspulen in ihren Aufnahmen zu +menu.hint_key_mpstop Weisen Sie eine Taste zum beenden der Wiedergabe zu +menu.hint_key_mptime Weisen Sie eine Taste für die Zeitanzeige in ihren Aufnahmen zu,\nSpielzeit und verbleibene Zeit +menu.hint_key_mptimeshift Weisen Sie eine Taste für das starten von Timeshift zu +menu.hint_key_pagedown Weisen Sie eine Taste für 'Seite weiter' zu +menu.hint_key_pageup Weisen Sie eine Taste für 'Seite zurück' zu +menu.hint_key_poweroff Wählen Sie eine Taste für den Standby\nund für das Verhalten für Standby und Deep-Standby +menu.hint_key_quickzap Konfigurieren Sie die Tastenbelegung für die Schnellumschaltung +menu.hint_key_repeatblock Die Verzögerung nach Tastendruck,\nauf den die Box reagieren soll +menu.hint_key_repeatblockgeneric Die Verzögerung zwischen Tastewiederholungen,\nauf die die Box reagieren soll +menu.hint_key_right Wählen Sie die Funktion für die 'links/rechts' Tasten aus im TV/Radio Modus +menu.hint_key_save Speichern Sie Tastenbelegungen als Datei in einer Config +menu.hint_key_screenshot Weisen Sie eine Taste zu, um Menü- und/oder TV-Screenshots zu speichern +menu.hint_key_sort Weisen Sie eine Taste für das sortieren in der Kanalliste zu +menu.hint_key_subchanneldown Weisen Sie eine Taste für das zurückschalten in den Unterkanälen zu +menu.hint_key_subchannelup Weisen Sie eine Taste für das weiterschalten in den Unterkanälen zu +menu.hint_key_transponder Weisen Sie eine Taste für das Anzeigen der Transponder in der Kanalliste zu +menu.hint_key_tvradiomode Wählen Sie eine Taste für das umschalten zwischen TV <> Radio Modus +menu.hint_key_unlock Weisen Sie eine Taste zum entriegeln zu,\nbetätigen Sie die 'rote' Taste und diese für 5 Sekunden +menu.hint_keys Fernbedienungs-Wiederholrate\nund Tastenbelegungen bearbeiten +menu.hint_lang_pref Wählen Sie ihre bevorzugten Audio-Sprachen, EPG\nund Untertitel-Sprachen +menu.hint_language OSD Sprache, Zeitzone\nbevorzugte Audio und Untertitel Sprachen +menu.hint_last_radio In dieser Menüzeile kann der gewünschte\nStart-Radio-Sender eingestellt werden +menu.hint_last_tv In dieser Menüzeile kann der gewünschte\nStart-TV-Sender eingestellt werden +menu.hint_last_use Speichert den aktuellen Kanal beim Herunterfahren der Box +menu.hint_leds_blink Die Power-LEDs blinken, wenn sich der Receiver\nim Deep-Standby befindet und ein Timer aktiv ist +menu.hint_leds_deepstandby Definiert den Status der Power-LEDs im Deep-Standby +menu.hint_leds_record Definiert ob die Power-LEDs blinken,\nwenn eine Aufnahme aktiv ist +menu.hint_leds_standby Definiert den Status der Power-LEDs im Standby +menu.hint_leds_tv Definiert den Status der Power-LEDs im TV-Betrieb +menu.hint_load Laden der Neutrino-HD-Einstellungen aus einer Datei +menu.hint_make_hdlist Bei aktiver Option wird ein Bouquet namens 'HD' erzeugt\nin dem alle HD Sender zusammengefasst sind +menu.hint_make_newlist Nach einer Kanalsuche wird ein Bouquet namens\n'neue Kanäle' erzeugt +menu.hint_make_removedlist Nach einer Kanalsuche wird ein Bouquet namens\n'gelöschte Kanäle' erzeugt +menu.hint_manage_settings Sichern, Wiederherstellen, zurück auf\nStandardwerte, Auslieferungszustand herstellen +menu.hint_mb Ihre Aufnahmen +menu.hint_media Abspielen von Filmen, Audiodateien\nbetrachten Sie Bilder +menu.hint_menu_fonts Ändern Sie im Menü die Schriftgrößen +menu.hint_menu_hints Zeigt Ihnen Hinweise zu den Menüpunkten an,\nbei Deaktivierung erreichen Sie es jederzeit auch mit der Taste 'Hilfe' +menu.hint_menu_pos Hier können Sie die Anzeigeposition der OSD-Menüs festlegen +menu.hint_misc_cec HDMI-CEC Optionen +menu.hint_misc_channellist Erweiterte Einstellungen für die Kanallisten\nZappingeinstellungen +menu.hint_misc_energy Energie- und Softstandby-Optionen, verzögertes Ausschalten\nsetzen bzw. ändern des Inaktivitätstimers +menu.hint_misc_epg EPG Sicherrungs- und Ladenoptionen, EPG-Einstellungen\nSicherungsverzeichnis für EPG-Daten +menu.hint_misc_filebrowser Dateisystem, Dateirechte anzeigen im Dateibrowser\nStartverzeichnisoptionen +menu.hint_misc_general Standby-, Teletext-, Rotor-Einstellungen\nPluginverzeichnis auf der HDD +menu.hint_misc_zapit Behandlung der Start-TV/Start-Radio Kanäle +menu.hint_movie Wiedergabe von Filmen +menu.hint_net_broadcast Hier können Sie die Broadcast-Adresse ändern,\nwenn Sie unsicher sind, verwenden Sie zuletzt .255 +menu.hint_net_dhcp Verwenden Sie einen DHCP-Server für die automatische\nKonfiguration können Sie es hier einstellen +menu.hint_net_djmount Mountet UPnP-Geräte als Dateisystem\nunter / media/00upnp +menu.hint_net_ftpd Aktivieren Sie die Dateiübertragung über FTP +menu.hint_net_gateway Hier können Sie die Gateway-Adresse des Routers eingeben +menu.hint_net_hostname Hier kann man den Hostnamen der Box ändern +menu.hint_net_if Wählen Sie die Schnittstelle zur Konfiguration +menu.hint_net_ipaddress Hier können Sie die IP-Adresse für die Box eingeben +menu.hint_net_mount Hier werden Netzwerkfreigaben bearbeitet\nNFS und CIFS werden supported +menu.hint_net_nameserver Hier können Sie die IP-Adresse des Routers\nbzw. eines DNS-Server eingeben +menu.hint_net_netmask Hier können Sie eine Netzwerkmaske eingeben\nStandart ist 255.255.255.0 +menu.hint_net_nfs_mount Hier können Sie die Netzwerkfreigaben und Mounts bearbeiten +menu.hint_net_nfs_umount Hier können Sie gemountete Verzeichnis wieder aushängen +menu.hint_net_ntp Hier kann man den Zeitserver ändern,\ndies dient der Zeitsynchronisation +menu.hint_net_ntpenable Aktiviert die Zeitsynchronisierung über das NTP-Protokoll\nwenn NTP-Sync nicht erfolgreich, verwenden Sie DVB +menu.hint_net_ntprefresh Hier können Sie den Interval zur Zeitsynchronisation einstellen +menu.hint_net_ntpserver Hier können Sie den NTP-Server eingeben +menu.hint_net_pass Hier können Sie das Passwort eingeben (WPA-PSK) +menu.hint_net_proxy Wenn Sie Proxy für den Zugriff auf das Internet benutzen\nkonfigurieren Sie es hier für den Online-Software-Update +menu.hint_net_proxypass Hier können Sie den Proxy-Passwort eingeben,\nwenn es erforderlich ist +menu.hint_net_proxyserver Hier können Sie den Proxyserver-Namen eingeben +menu.hint_net_proxyuser Hier können Sie den Proxy-Benutzernamen eingeben,\nwenn es erforderlich ist +menu.hint_net_services Konfigurieren Sie Netzwerkservices:\nTelnet, FTP, UPnP +menu.hint_net_setupnow Hier werden die aktuellen Einstellungen zugewiesen\nbzw. geänderte übernommen +menu.hint_net_setuponstartup Startet das Netzwerk automatisch beim Booten +menu.hint_net_show Zeigen Ihnen die aktuellen Netzwerkeinstellungen +menu.hint_net_ssid Hier können Sie die Wireless-Netzwerk-SSID eingeben\nmit der Sie eine Verbindung herstellen möchten +menu.hint_net_telnet Aktivieren Sie den Telnet-Login auf Ihrer Box,\nNutzer: root Passwort: coolstream +menu.hint_net_test Testet die Netzwerkverbindung:\nPing auf Gateway, Name-Server und externe IP-Adressen +menu.hint_net_ushare Freigabe verbundener HDD über UPnP +menu.hint_network IP-Adresse, Gateway, DNS-, Time-Sync\nNetzwerk-Freigaben und Dienste +menu.hint_new_zap_mode Aktiviert Quickzap in der Kanalliste. Nach Betätigen der Mute-\nTaste wird mit den Hoch/Runter Tasten der Sender umgeschaltet +menu.hint_osd Farben, Schriftarten, Anzeigegröße\nGUI Ansichtsoptionen +menu.hint_osd_language Wählen Sie ihre OSD Sprache +menu.hint_osd_preset Hier können Sie zwischen Röhren-TV (CRT) oder Flachbildschirm (LCD) vorwählen +menu.hint_parentallock_changepin Hier wird der 4 stellige PIN Code eingegeben,\nder dann ggf. abgefragt wird +menu.hint_parentallock_lockage Hier wird festgelegt, bei welcher Altersklasse\ndie PIN Abfrage kommt +menu.hint_parentallock_prompt Hier wird definiert, wann eine PIN Eingabe erfolgen soll +menu.hint_personalize aktivieren, deaktivieren, schützen von Menüpunkten\nkonfigurieren der Farb-Tasten in den Benutzermenüs +menu.hint_pictureviewer_defdir Hier wählen Sie das Startverzeichnis für den Bildbetrachter +menu.hint_pictureviewer_scaling Hier kann die Bildauflösung eingestellt werden +menu.hint_pictureviewer_slide_time Hier kann der Slideshow-Intervall geändert werden,\nStandardmässig ist ein Intervall von 10 Sekunden eingstellt +menu.hint_picview Bilder anzeigen +menu.hint_plugins_hdd_dir Auswahl des Verzeichnisses zum laden von Plugins\n auf der HDD +menu.hint_power_leds Konfiguriert das Verhalten der LEDs an der Power-Taste +menu.hint_pref_lang Wählen Sie ihre bevorzugte Audio- und EPG-Sprache,\ndie Einstellung 'none' deaktiviert diese Option +menu.hint_pref_subs Wählen Sie ihre bevorzugte Untertitel-Sprache,\ndie Einstellung 'none' deaktiviert diese Option +menu.hint_progressbar_color Bei aktivierter Option werden alle Fortschrittsbalken in Farbe\nund nicht im klassischen Weiß angezeigt +menu.hint_protection Schützen Sie Inhalte per PIN-Code\nStandard-PIN ist 0000 +menu.hint_radiomode Schaltet zum Radio-Modus +menu.hint_reboot Startet die Box neu.\nOhne Bestätigung +menu.hint_record_apid_ac3 Schließt bei einer Aufnahme die durch den Sender definierte 'Dolby Digital Tonspur'\nin die Aufnahme ein, sofern diese vorhanden ist +menu.hint_record_apid_alt Sind weitere Tonspuren verfügbar, dann können diese hiermit bei einer\nAufnahme entsprechend ein- bzw. ausgeschlossen werden +menu.hint_record_apid_std Schließt bei einer Aufnahme die durch den Sender definierte 'Standard Tonspur'\nin die Aufnahme ein, bzw. schließt diese aus +menu.hint_record_apids Konfigurieren Sie die Tonspuren für die Aufnahme +menu.hint_record_apply Hiermit werden die Aufnahmeoptionen übernommen +menu.hint_record_chandir Diese Option speichert Aufnahmen mit dem Namen des Kanals\nin ein eigenes Verzeichnis +menu.hint_record_dir Hier wählen Sie das Aufnahmeverzeichnis +menu.hint_record_end Hier können Sie wählen zwischen max. Aufnahmezeit\noder anhand der EPG-Daten +menu.hint_record_tdir Wählen Sie eine Verzeichnis für Ihre Timeshift-Aufnahmen\nim temporären Timeshiftmodus +menu.hint_record_time Hier wird die maximale Zeit in Stunden eingetragen außer\nSie stoppen die Aufnahme vorzeitig +menu.hint_record_timeafter Hier kann die Endzeit für den Aufnahmetimer eingestellt werden,\nein Wert von 2, beendet die Aufnahme 2 Minuten nach dem Sendungsende +menu.hint_record_timebefore Hier kann die Startzeit für den Aufnahmetimer eingestellt werden,\nein Wert von 2, startet die Aufnahme 2 Minuten vor dem Sendungsbeginn +menu.hint_record_timer Konfigurieren Sie Timeroptionen für Aufnahmen +menu.hint_record_timeshift Konfigurieren Sie ihre Timeshift-Optionen +menu.hint_record_timeshift_auto Hier können Sie die Zeit einstellen nachdem Timeshift aktiv ist\nund Sie umschalten, in Sekunden +menu.hint_record_timeshift_delete Hier können Sie wählen ob nach beenden von Timeshift\ndie Aufnahmen gelöscht werden +menu.hint_record_timeshift_pause Wenn die Funktion aktiviert ist, lässt sich Timeshift\ndurch die Pause-Taste auf der Fernbedienung aktivieren +menu.hint_record_timeshift_temp Ist dies Option deaktiviert wird Timeshift direkt als Aufnahme gestartet +menu.hint_record_zap Bei aktiver Option wird bereits mit der Ankündigung\nder Aufnahme auf den aufzunehmenden Sender umgeschaltet +menu.hint_record_zap_pre_time Hier kann für den Umschalttimer ein Vorlaufzeit in Minuten eingestellt werden +menu.hint_recording Aufnahme- und Timeshift-Optionen\nTimer Optionen, Audio-PIDs Optionen +menu.hint_reload_channels Kanallisten neu laden\nKanallisten aktualisieren +menu.hint_reload_plugins Plugins neu laden\nPlugin-Liste aktualisieren +menu.hint_reset Zurücksetzen von Neutrino-HD-Einstellungen auf Standardwerte\nTuner Einstellungen und Kanäle bleiben erhalten +menu.hint_restore Wiederherstellen von vorher erstellten Sicherungen +menu.hint_rotor_swap Tauschen der Rotordrehrichtung Ost/West\nim Motorsetup +menu.hint_rounded_corners Aktiviert die Darstellung abgerundeter Ecken für die OSD-Menüs +menu.hint_save_settings Speichern Sie alle Einstellungen im Image +menu.hint_saveas Speichern der Neutrino-HD-Einstellungen in eine Datei +menu.hint_scan_auto Auto-Scan ausgewählter Anbieter +menu.hint_scan_autoall Scannen Sie ihre ausgewählten Anbieter auf einmal +menu.hint_scan_autoall_select Nur in ausgewählten Satelliten scannen +menu.hint_scan_bouquet erneuern: hinzufügen zu den Bouquets, löschen: entfernt alte Bouquets, nicht ändern: Neue werden in 'Andere' angefügt +menu.hint_scan_cable Wählen Sie ihr Kabelnetz zum scannen +menu.hint_scan_cable_simple Kabel-Scan mit optionaler Anbieter- und Kanal-Nummerierung +menu.hint_scan_commited Wählen Sie ihre Einstellungen für diesen Satelliten +menu.hint_scan_diseqc Wählen Sie DiSEqC-Schalter-Eingangssignal für diesen Satelliten +menu.hint_scan_diseqcrepeat Diseqc Wiederholungen für kaskadierte Schaltungen,\nnutzen Sie die links/rechs Tasten +menu.hint_scan_diseqctype Wählen Sie ihr DiSEqC-Protokoll\nmit 'Erweitert' können Sie ihre Anlage einbinden +menu.hint_scan_fast Schnell-Scan eines ausgewählten Anbieters\nWARNUNG: DiSEqC-Config wird überschrieben +menu.hint_scan_fastprov Wählen Sie einen Anbieter (Provider) zum scannen +menu.hint_scan_fasttype Wählen Sie das Sendeformat +menu.hint_scan_fec Wählen Sie eine Transponder-FEC +menu.hint_scan_femode Wählen Sie den Verbindungstyp für den zweiten Tuner +menu.hint_scan_fesetup Konfigurieren des oder der Tuner +menu.hint_scan_fetimeout Zeit bis zum warten des Signal, in 1/10 Sekunden,\nbenutzen Sie die links/rechts Tasten +menu.hint_scan_freq Geben Sie eine Transponder-Frequenz ein +menu.hint_scan_fta Lassen Sie nur frei empfangbare (nicht-verschlüsselte) Programme suchen +menu.hint_scan_ladirection Wählen Sie ihre Breitengrad-Ausrichtung +menu.hint_scan_latitude Geben Sie ihren Breitengrad ein +menu.hint_scan_lnbconfig Konfigurieren Sie LNB-Parameter für diesen Satelliten +menu.hint_scan_lodirection Wählen Sie ihre Längengrad-Ausrichtung +menu.hint_scan_lofh High-Banb LNB-Frequenz +menu.hint_scan_lofl Low-Band LNB-Frequenz +menu.hint_scan_lofs LNB-Band-Umschalter Frequenz +menu.hint_scan_logical Verwenden Sie die Kanal-Nummerierung des Anbieters +menu.hint_scan_logical_hd Wenn der Kanal in SD und in HD verfügbar ist,\nwird HD nach oben in der Liste gesetzt +menu.hint_scan_longitude Geben Sie ihren Längengrad ein +menu.hint_scan_manual Manueller Transponder-Scan mit ausgewählten Parametern +menu.hint_scan_mod Wählen Sie eine Transponder-Modulation +menu.hint_scan_motor_speed Rotor-Bewegungsgeschwindigkeit in 1/10 Grad pro Sekunde +menu.hint_scan_motorpos Wählen Sie eine gespeicherten Positions-Nummer für diesen Satelliten +menu.hint_scan_nid Hier können Sie ihre Kabelnetzwerk-Id in dezimal eingeben +menu.hint_scan_nit Hier kann man Transponder über gesendete NIT-Daten (Network Information Table) hinzufügen lassen +menu.hint_scan_pids Scant und speichert auch nur Audio / Video / PMT PIDs +menu.hint_scan_pol Wählen Sie eine Transponder-Polarisation +menu.hint_scan_rate Geben Sie eine Transponder-Symbolrate ein +menu.hint_scan_reset_numbers Zurücksetzen der existierender Kanalnummern und Umnummerierung nach einen Scan +menu.hint_scan_satadd Wählen Sie ihre verfügbaren Satelliten hier aus, für Ihren Anschluß +menu.hint_scan_satellite Wählen Sie die Satelliten zum scannen +menu.hint_scan_satenable Aktivieren Sie diesen Satelliten für ihre Anlage zum scannen +menu.hint_scan_satfind Sat-Finder: fahren Sie manuell Ihre Rotor-Positionen durch +menu.hint_scan_satfind_start Startet den Satellitenfinder für die Signalstärke +menu.hint_scan_satscan Scant den ausgewählten Satelliten +menu.hint_scan_satselect Ausgewählter Satellit +menu.hint_scan_satsetup Hier können Sie ihre gewählten Satelitten sehen und das LNB konfigurieren +menu.hint_scan_savesettings Speichert die Tuner-Config und Scan-Einstellungen,\ndiese bleiben dann erhalten für einen neuen Service-Scan +menu.hint_scan_scantype Wählen Sie, welche Kanal-Typen Sie scannen möchten +menu.hint_scan_setup_fe Konfigurieren Sie ihre ausgewählten Tuner +menu.hint_scan_start Startet die Kanalsuche mit den angegebenen Parametern.\nMit der 'EXIT' Taste kann man abbrechen +menu.hint_scan_test Testen Sie das Signal für diesen Transponder +menu.hint_scan_tpselect Wählen Sie einen einzelnen Transponder zum scannen +menu.hint_scan_uncommited Wählen Sie nicht festgeschriebene Angaben für diesen Satelliten +menu.hint_scan_usals_repeat Hier können Sie die USALS-Wiederholungen eingeben für den Rotor +menu.hint_scan_usalsall Setzen oder entfernen Sie USALS-Merker für alle Satelliten +menu.hint_scan_useusals Verwenden Sie USALS für diesen Satelitten +menu.hint_scrambled_message Bei aktivierter Option erscheint eine Meldung,\nwenn ein verschlüsselter Sender nicht entschlüsselt werden kann +menu.hint_screen_setup Konfigurieren Sie den Bildschirmbereich für die Menüanzeige +menu.hint_screenshot_count Hier können Sie wählen, wie viele Screenshots (1-5) erstellt werden sollen +menu.hint_screenshot_cover ein: Bei der Wiedergabe von Aufnahmen ein Video-Screenshot erstellen\nfür die Vorschau im Moviebrowser +menu.hint_screenshot_dir Hier wählen Sie das Verzeichnis zum speichern der Screenshots +menu.hint_screenshot_format Wählen Sie das Dateiformat zum speichern der Screenshots +menu.hint_screenshot_res Screenshot Größe: aktuelle TV-Auflösung oder OSD-Größe (1280x720) +menu.hint_screenshot_scale Für Video + OSD Screenshots, Skalierung auf Video-Größe +menu.hint_screenshot_setup Hier können Sie die Optionen zum erstellen von Screenshots einrichten +menu.hint_screenshot_video Diese Funktion übernimmt das Live-Bild in den Screenshot als Hintergrund +menu.hint_scripts Skripts ausführen +menu.hint_selected_back Ändern Sie die Hintergrundfarbe für selektierte Fensterinhalte +menu.hint_selected_text Ändern Sie die Textfarbe für selektierte Fensterinhalte +menu.hint_service Kanalsuche, Senderscan,\nBouquet-Verwaltung, Software-Aktualisierung +menu.hint_service_scan Tuner-Einstellungen, Service-Scan +menu.hint_settings Konfigurieren von Neutrino-HD.\nNetzwerk, Video, Audio, OSD und mehr +menu.hint_show_mute_icon Definiert ob beim Lautstärkewert 0 das Mute-Icon eingeblendet werden soll +menu.hint_shutdown Setzen Sie Ihre Box in den Standby-Modus\noder schalten Sie die Box komplett aus +menu.hint_shutdown_count Die Zeit zum Deep-Standby,\nwenn die Box im Soft-Standby-Mode ist +menu.hint_shutdown_rcdelay Aktiviert den Deep-Standby, wenn der Powerknopf\nlänger als 1 Sekunde betätigt wird +menu.hint_shutdown_real Aktivieren des Soft-Standby-Modus, wenn diese Option\ndeaktiviert ist, geht die Box in den Deep-Standby +menu.hint_sleeptimer Zeitschaltuhr auf Ihrer Box aktivieren.\nDie Box geht dann in den Standby-Modus +menu.hint_soft_restart Neustarten von Neutrino-HD ohne zu Rebooten +menu.hint_softupdate_check Im Internet oder lokal nach verfügbaren Updates suchen +menu.hint_softupdate_expert Einzelne Partitionen aus dem Flash lesen / in den Flash schreiben +menu.hint_softupdate_expert_read Einzelne Partitionen (U-Boot, Splash, Kernel, SystemFS) aus dem Flash lesen +menu.hint_softupdate_expert_write Einzelne Partitionen (Splash, Kernel, SystemFS) in den Flash schreiben +menu.hint_softupdate_settings Den Updatemodus, das lokale Verzeichnis und die Konfigurationsdatei festlegen +menu.hint_start_tostandby Aktiviert den Standby-Modus nach dem starten der Box +menu.hint_streaminfo Aktuelle Sender-Informationen: PIDs, SNR-Verhältnis\nBitrate grafisch +menu.hint_subchannel_pos Hier können Sie die Anzeigeposition der Untertitel auswählen +menu.hint_sw_update Neutrino-HD auf Software-Update überprüfen\nImage sichern und wiederherstellen +menu.hint_theme Wählen Sie vordefiniertes Farbschema, Speichern oder Laden Sie Theme aus Filen +menu.hint_timeouts Gibt an, nach welcher Zeit in Sekunden die Menüs oder\nInfofenster sich automatisch schließen (0 deaktiviert) +menu.hint_timers Hinzufügen / Entfernen / Bearbeiten geplanter\nAufnahme, Meldungen etc. +menu.hint_timezone Wählen Sie ihre Zeitzone aus +menu.hint_tvmode Schaltet zum TV-Modus +menu.hint_tvradio_switch Schaltet zwischen TV- und Radio-Modus um +menu.hint_vfd Frontpanel Power-LEDs und VFD Optionen +menu.hint_vfd_brightness Definiert die Helligkeit im TV-Betrieb +menu.hint_vfd_brightness_setup Konfiguriert die Displayhelligkeit des Frontpanels für verschiedene Modi +menu.hint_vfd_brightnessdeepstandby Definiert die Helligkeit, wenn sich der Receiver im Deep-Standby befindet +menu.hint_vfd_brightnessdim Definiert den Wert für das dimmen des Display nach Ablauf der eingestellten Zeit +menu.hint_vfd_brightnessstandby Definiert die Helligkeit, wenn sich der Receiver im Standby befindet +menu.hint_vfd_defaults Setzt die Standardeinstellungen für die Helligkeitswerte +menu.hint_vfd_dimtime Hier kann in Sekunden eingegeben werden,\nwann sich das Display automatisch auf den gewünschten Wert dimmt +menu.hint_vfd_infoline Wählen Sie, was in der Infozeile angezeigt werden soll +menu.hint_vfd_statusline Wählen Sie, was in der Statuszeile angezeigt werden soll +menu.hint_video Video-Ausgang, Auflösung, Format,\nSeitenverhältnise, Modus-Schalter Optionen +menu.hint_video_43mode Anzeigemodus für 4:3-Inhalte auf 16:9 TVs +menu.hint_video_analog_mode Wählen Sie den Analogausgang Modus\nfür den SCART und CINCH Anschluss +menu.hint_video_cinch_mode Wählen Sie den Analogausgang Modus\nfür den Composite Video Ausgang +menu.hint_video_dbdr Verwendeter MPEG2 Filter +menu.hint_video_format Diese Option aktiviert das 'Bildschirmformat'\nauf das Format Ihres Fernsehgerätes +menu.hint_video_mode Definiert in welchen Videoformat das Bild über den\nHDMI-Ausgang ausgegeben wird +menu.hint_video_modes Definiert welche Videosysteme mit der VF-Taste\nder Fernbedienung ausgewählt werden können +menu.hint_video_scart_mode Wählen Sie den Analogausgang Modus\nfür den SCART Ausgang +menu.hint_volume_digits Zifferndarstellung der Lautstärkeanzeige ein/ausschalten +menu.hint_volume_pos Hier können Sie die Anzeigeposition der Lautstärkeanzeige auswählen +menu.hint_zap_cycle Dadurch wird nur innerhalb des aktiven Bouquets gezappt menu.next Weiter (Menü zum Beenden) messagebox.back Zurück messagebox.cancel Abbruch @@ -949,13 +1323,14 @@ networkmenu.ntpserver NTP-URL (Zeitserver) networkmenu.ntpserver_hint1 NTP-URL Beispiel: ntp1.ptb.de networkmenu.ntpserver_hint2 braucht Reboot oder EPG-Reset networkmenu.ntptitle Zeitsynchronisation -networkmenu.password Passwort +networkmenu.password Passwort (PSK) networkmenu.reset_settings_now Sollen die vorherigen Einstellungen \nwieder hergestellt werden? networkmenu.select_if Schnittstelle +networkmenu.services Netzwerkservice networkmenu.setupnow Einstellungen jetzt zuweisen networkmenu.setuponstartup Beim Start Netzwerk setzen networkmenu.show Aktive Einstellungen zeigen -networkmenu.ssid Netzwerkname +networkmenu.ssid Netzwerkname (SSID) networkmenu.test Netzwerk testen neutrino_starting Neutrino-HD wird gestartet... nfs.alreadymounted Verzeichnis bereits gemountet. @@ -1039,7 +1414,7 @@ personalize.pinprotect ja personalize.pinstatus mit PIN personalize.plugins Plugins personalize.usermenu_preferred_buttons Bevorzugte Tasten zuweisen -personalize.usermenu_show_cancel Zeige Schalter "Abbrechen" +personalize.usermenu_show_cancel Zeige Schalter "Abbrechen" personalize.visible sichtbar pictureviewer.defdir Start-Verz. pictureviewer.head Bildbetrachter @@ -1087,9 +1462,9 @@ rclock.lockmsg Die Fernbedienung der Coolstream wird gesperrt.\n Um die Sperre a rclock.menueadd FB sperren rclock.title Fernbedienung sperren rclock.unlockmsg Fernbedienung reaktiviert... -recording.is_running Aufzeichung auf diesem Kanal läuft bereits! -recording.start Starte Aufzeichnung, bitte warten...! -recording.stop Beende Aufzeichnung, bitte warten...! +recording.is_running Folgende Aufnahme läuft bereits! Neue Aufnahme starten? +recording.start Starte Aufnahme, bitte warten...! +recording.stop Beende Aufnahme, bitte warten...! recordingmenu.apids Tonspuren recordingmenu.apids_ac3 AC3 Tonspuren aufnehmen recordingmenu.apids_alt Alternative Tonspuren aufn. @@ -1110,7 +1485,7 @@ recordingmenu.record_is_not_running Keine laufende Aufnahme verfügbar! recordingmenu.record_is_running Aufnahme läuft! recordingmenu.save_in_channeldir Speichere im Kanalverzeichnis recordingmenu.server Server -recordingmenu.server_mac Mac Adresse +recordingmenu.server_mac MAC-Adresse recordingmenu.setupnow Einstellungen jetzt übernehmen recordingmenu.timeshift Timeshift recordingmenu.tsdir Timeshift Aufnahmeverzeichnis @@ -1125,6 +1500,7 @@ reset_confirm Sind Sie sich sicher? reset_settings Einstellungen auf Standardwerte satsetup.auto_scan Automatisch einen gewählten %s satsetup.auto_scan_all Automatisch alle Satelliten +satsetup.cable Kabel-Scan satsetup.cable_nid Netzwerk ID satsetup.comm_input Committed Input satsetup.diseqc DiSEqC @@ -1152,10 +1528,11 @@ satsetup.fe_mode_alone independent satsetup.fe_mode_loop loop satsetup.fe_mode_single single satsetup.fe_mode_twin twin -satsetup.fe_setup Setup tuner +satsetup.fe_setup Setup Tuner satsetup.lofh LNB High Offset satsetup.lofl LNB Low Offset satsetup.lofs LNB Switch Offset +satsetup.logical_hd HD-Kanäle bevorzugen satsetup.logical_numbers Nutze logische Nummern satsetup.manual_scan Manueller Frequenzscan satsetup.minidiseqc Mini-DiSEqC @@ -1234,6 +1611,7 @@ servicemenu.update Software-Aktualisierung settings.backup Image-Einstellungen: Sichern settings.backup_failed Sicherung fehlgeschlagen! settings.help Hilfe +settings.menu_hints Menühinweise anzeigen settings.menu_pos Menüposition settings.missingoptionsconffile Die Neutrino-HD Einstellungen wurden erweitert.\nDie neuen Werte werden auf Standard gesetzt. settings.noconffile Die Neutrino-HD Einstellungen wurden nicht\ngefunden. Es werden Standardwerte benutzt. @@ -1416,7 +1794,7 @@ videomenu.videoformat_169 16:9 videomenu.videoformat_43 4:3 videomenu.videomode Videosystem wizard.welcome_head Willkommen zur Ersteinrichtung Ihres Receivers! -wizard.welcome_text Wir gratulieren Ihnen zum Kauf Ihrer Coolstream. In den nun folgenden\nSchritten begleiten wir Sie durch die Erstinstallation des Gerätes.\nWir wünschen Ihnen viel Freude mit dem wohl einzigartigsten Receiver!\nBeachten Sie: Ihre Coolstream Set-Top-Box lässt sich bequem per Webinterface\nsteuern, um zum Beispiel die Timer-Verwaltung zu nutzen oder Live-TV im Web-Browser zu schauen.\nZugriff erhalten Sie mit dem Benutzernamen: root und dem Passwort: coolstream\nAchten Sie darauf, dass Ihre Gerät nicht von aussen zugänglich ist, da sonst ein Zugriff über das Internet nicht ausgeschlossen werden kann!\nNächster Schritt? +wizard.welcome_text Wir gratulieren Ihnen zum Kauf Ihrer Coolstream. In den nun folgenden\nSchritten begleiten wir Sie durch die Erstinstallation des Gerätes.\nWir wünschen Ihnen viel Freude mit dem wohl einzigartigsten Receiver!\nBeachten Sie: Ihre Coolstream Set-Top-Box lässt sich bequem per Webinterface\nsteuern, um zum Beispiel die Timer-Verwaltung zu nutzen oder Live-TV im Web-Browser zu schauen.\nZugriff erhalten Sie mit dem Benutzernamen: root und dem Passwort: coolstream\nAchten Sie darauf, dass Ihre Gerät nicht von aussen zugänglich ist,\nda sonst ein Zugriff über das Internet nicht ausgeschlossen werden kann!\nNächster Schritt? word.from ab zapit.scantype Service-Auswahl zapit.scantype.all Alle Services diff --git a/data/locale/english.locale b/data/locale/english.locale index 342c113ad..10e8c4549 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -299,6 +299,7 @@ epgextended.presenter Presenter epgextended.year_of_production Year of Production epglist.noevents EPG is not available... epgviewer.More_Screenings More Screenings on this Channel +epgviewer.More_Screenings_short More Screenings epgviewer.nodetailed No detailed informations available epgviewer.notfound no epg found eventfinder.head Search in EPG @@ -391,6 +392,7 @@ extra.tp_pol_r R extra.tp_rate Symbol rate extra.update_dir Local update directory extra.use_gotoxx Use gotoXX +extra.volume_digits Volumebar digits extra.volume_pos Volumebar extra.west West extra.zap_cycle Zap cycle @@ -434,7 +436,8 @@ filesystem.is.utf8.option.utf8 UTF-8 flashupdate.actionreadflash reading flashupdate.cantopenfile can't open file flashupdate.cantopenmtd can't open mtd-device -flashupdate.checkupdate Check for updates +flashupdate.checkupdate_internet Check for online updates +flashupdate.checkupdate_local Local update flashupdate.currentversion_sep Current version flashupdate.currentversiondate Date flashupdate.currentversiontime Time @@ -521,6 +524,7 @@ fontsize.infobar_info info fontsize.infobar_number Number fontsize.infobar_small Small fontsize.menu Menutext +fontsize.menu_hint Menu hints fontsize.menu_info Menu Info fontsize.menu_title Menu Title hdd_10min 10 min. @@ -576,7 +580,7 @@ infoviewer.subchan_infobar Full infobar infoviewer.subservice Subservices infoviewer.waittime Waiting for time... ipsetup.hint_1 Use 0..9, or use Up/Down, -ipsetup.hint_2 OK saves, LAME! aborts +ipsetup.hint_2 OK saves, Exit aborts keybindingmenu.RC Tune Remote-Control keybindingmenu.addrecord add record timer keybindingmenu.addremind add zapto timer @@ -642,7 +646,7 @@ lcdmenu.statusline.both volume / playtime lcdmenu.statusline.playtime playtime lcdmenu.statusline.volume volume ledcontroler.blink Blink in deep standby, if timer set -ledcontroler.menu Power Button LED�s +ledcontroler.menu Power Button LEDs ledcontroler.mode.deepstandby Deep Standby ledcontroler.mode.record Blinke in Record ledcontroler.mode.standby Standby @@ -687,208 +691,376 @@ mainsettings.timezone Timezone mainsettings.video Video menu.back Back menu.cancel Cancel - -menu.hint_back Return to previous menu\nPress menu key to close all menus -menu.hint_tvmode Switch box to TV mode -menu.hint_radiomode Switch box to radio mode -menu.hint_timers Add/Remove/Edit scheduled\nrecording, reminders etc. -menu.hint_media Play movies, audio files\nWatch pictures -menu.hint_games Show list of installed games -menu.hint_scripts Run scripts -menu.hint_settings Configure Neutrino-HD\nNetwork, audio, video, OSD and more -menu.hint_service Tuner setup, service scan,\nbouquet editor, software upgrade -menu.hint_sleeptimer Set timer to put your box\nin sleep mode -menu.hint_reboot Reboot box\nNo confirmation -menu.hint_shutdown Put your box in deep standby mode\nNo confirmation -menu.hint_info Information about image, box cpu and storage,\nstream information -menu.hint_ci Conditional access menu\nto setup your CI CAM or embeded Conax card - -menu.hint_aplay Audio player -menu.hint_inet_radio Internet radio -menu.hint_movie Play movies -menu.hint_picview View pictures -menu.hint_mb Your recordings -menu.hint_fileplay Play various video files - -menu.hint_save_settings Save all settings to flash -menu.hint_manage_settings Backup, restore, revert to defaults\nFactory box reset -menu.hint_personalize Enable, disable or Protect menu items\nConfigure color-buttons user menus -menu.hint_extended Power saving, EPG save/load options\nHDMI-CEC, Start channel, zap options -menu.hint_video Video output, resolution, format\nAspect ratio, fast mode switch options -menu.hint_audio Audio output, DD\nSRS True volume options -menu.hint_protection Protect content by PIN code\nDefault PIN 0000 -menu.hint_network IP address, gateway, DNS, Time sync\nNetwork shares and services -menu.hint_recording Recording and timeshift options\nTimers safety, audio pids options -menu.hint_language OSD language, timezone\nPreffered audio and subtitles languages -menu.hint_osd Colors, fonts, screen size\nGUI look and feel options -menu.hint_vfd Frontpanel LEDS, VFD options -menu.hint_hdd Format / check hard disk drive -menu.hint_keys Remote control repeat rate\nEdit key bindings menu.hint_a_pic Configure audio player and picture viewer - -menu.hint_service_scan Tuner setup, service scan -menu.hint_reload_channels Reload channels from flash -menu.hint_bedit Edit favorites and bouquets -menu.hint_delete_channels Remove all channels -menu.hint_soft_restart Restart Neutrino-HD without reboot -menu.hint_reload_plugins Reload plugins from flash -menu.hint_sw_update Update software - -menu.hint_imageinfo Information about installed software -menu.hint_dboxinfo Information about box cpu and storage -menu.hint_streaminfo Current channel info: pids, signal and noise ratio\nBitrate graphs - -menu.hint_reset Reset Neutrino-HD GUI settings to defaults\nTuner config and channels not affected -menu.hint_saveas Save Neutrino-HD GUI settings to file -menu.hint_load Load Neutrino-HD GUI settings from file -menu.hint_backup Backup configs and channels to selected dir -menu.hint_restore Restore files from selected backup -menu.hint_factory Reset box to factory state\nBox will reboot after reset - -menu.hint_misc_general Start to standby, cache teletext, swp rotor\nplugin hdd dir -menu.hint_misc_energy Enable soft-standby, delayed shutdown\ninactivity timers -menu.hint_misc_epg Save/load EPG options, EPG cache options\nEPG save directory -menu.hint_misc_filebrowser Filesystem encoding, file rights\ndeny directory leave -menu.hint_misc_cec HDMI-CEC Options -menu.hint_misc_channellist HD/New/Removed channel lists\nZap cycle -menu.hint_misc_zapit Initial TV/Radio channels - -menu.hint_start_tostandby Enter standby mode after boot -menu.hint_cache_txt Start teletext caching after channel switch -menu.hint_fan_speed Control fan speed -menu.hint_rotor_swap Swap rotor east/west directions\nin motor control -menu.hint_plugins_hdd_dir Select directory to load\nplugins from - -menu.hint_shutdown_real Enable soft-standby mode\nIf disabled, power button put box to deep-standby -menu.hint_shutdown_rcdelay Enable deep-standby, if power button\npressed more than 1 second -menu.hint_shutdown_count Time to put box in deep-standby\nfrom soft-standby mode -menu.hint_inact_timer Shutdown box after inactivity - -menu.hint_epg_save Save cached EPG to harddisk or usb flash\nand load it after boot -menu.hint_epg_cache Maximum days to cache for future events -menu.hint_epg_extendedcache Maximum hours to cache extended\nevents descriptions -menu.hint_epg_old_events Hours after event end time to consider\nevent old and remove it from cache -menu.hint_epg_max_events Maximum events to cache. After reaching limit\nEPG cache will remove future events -menu.hint_epg_dir Select directory on harddisk or usb flash\nto save EPG. - -menu.hint_filesystem_is_utf8 Filebrowser filesystem encoding -menu.hint_filebrowser_showrights Show file permissions in file browser -menu.hint_filebrowser_denydirectoryleave Deny filebrowser to leave initial directory - -menu.hint_make_hdlist Auto-create HD channel list based on\nchannel type and name -menu.hint_make_newlist Create list of recently added channels -menu.hint_make_removedlist Create list of recently removed channels -menu.hint_keep_numbers Keep channel numbers over next scans\nand bouquets editing -menu.hint_zap_cycle When swithing channels, stay in current bouquet -menu.hint_new_zap_mode Allow channel switch while browsing\n(toggle mode with 'mute' in channel list) - -menu.hint_cec_mode CEC mode -menu.hint_cec_view_on CEC view ON -menu.hint_cec_standby CEC standby - -menu.hint_last_use Start box on last used channel -menu.hint_last_tv Start box on selected channel\nif last mode is TV -menu.hint_last_radio Start box on selected channel\nif last mode is Radio - -menu.hint_video_analog_mode Select analog output mode\nfor SCART and CINCH connectors -menu.hint_video_scart_mode Select analog output mode for SCART connectors -menu.hint_video_cinch_mode Select analog output mode for\ncomposite video out -menu.hint_video_43mode Display mode for 4:3 content\non 16:9 TV -menu.hint_video_format TV aspect ratio -menu.hint_video_mode HDMI output video mode -menu.hint_video_dbdr MPEG2 enhancement filters -menu.hint_video_modes VF key will cycle between enabled modes - +menu.hint_aplay Audio player +menu.hint_audio Audio output, DD\nSRS True volume options menu.hint_audio_analog_mode Select audio channel to use\nstereo, mono-left, mono-right +menu.hint_audio_avsync A/V sync menu.hint_audio_dd Auto-switch to DolbyDigital audio pid,\nif available menu.hint_audio_hdmi_dd DolbyDigital over HDMI: off - decoded\nauto if supported by device, force menu.hint_audio_spdif_dd DolbyDigital over optical output -menu.hint_audio_avsync A/V sync -menu.hint_audio_volstep Volume +/- keys increase/decrease step menu.hint_audio_srs SRS TruVolume control volume jumps\nat content changes menu.hint_audio_srs_algo Amount of control, light or normal menu.hint_audio_srs_nmgr Noise manager menu.hint_audio_srs_volume Reference level to maintain - -menu.hint_parentallock_promt Configure when Neutrino-HD will ask you\nfor PIN code -menu.hint_parentallock_lockage Select age allowed to watch -menu.hint_parentallock_changepin Change PIN code - -menu.hint_net_setupnow Apply current settings -menu.hint_net_test Test network connection: ping gateway,\n name server and external IP -menu.hint_net_show Show current network settings -menu.hint_net_if Select interface to config -menu.hint_net_setuponstartup Start network at boot time -menu.hint_net_dhcp Use DHCP server to auto-configure -menu.hint_net_hostname Change your box hostname -menu.hint_net_ipaddress Enter your box IP address -menu.hint_net_netmask Enter network mask\nif unsure, use 255.255.255.0 -menu.hint_net_broadcast Enter broadcast address\nif unsure, use IP address with last .255 -menu.hint_net_gateway Enter gateway/router IP address -menu.hint_net_nameserver Enter name server (DNS) IP address -menu.hint_net_ssid Enter SSID of wireless network\nyou want to connect to -menu.hint_net_pass Enter passkey (WPA-PSK) -menu.hint_net_ntp Configure time sync -menu.hint_net_mount Configure, mount and un-mount network shares\nNFS and CIFS supported -menu.hint_net_nfs_mount Configure and mount network shares -menu.hint_net_nfs_umount Un-mount mounted shares -menu.hint_net_ntpenable Enable time sync using NTP protocol\nIf NTP sync not successfull, DVB will be used -menu.hint_net_ntpserver Enter NTP server name -menu.hint_net_ntprefresh Time sync interval -menu.hint_net_proxy If you use proxy to access internet\nconfigure it here for online software update -menu.hint_net_proxyserver Proxy server name -menu.hint_net_proxyuser Proxy user name\nif authorization required -menu.hint_net_proxypass Proxy user password\nif authorization required -menu.hint_net_services Configure network services:\nTelnet, ftp, uPnp -menu.hint_net_telnet Enable telnet login to your box -menu.hint_net_ftpd Enable file transfer using FTP -menu.hint_net_djmount mount uPnp devices as filesystem\nunder /media/00upnp -menu.hint_net_ushare Share connected HDD over uPnp - -menu.hint_record_apply Apply record options -menu.hint_record_dir Select directory to store recordings -menu.hint_record_chandir Create directory with name of channel\nto store recording -menu.hint_record_time Record time before stop when\nusing direct record with record button -menu.hint_record_end Stop direct record after max. time\nor after current event end time -menu.hint_record_timeshift Configure timeshift options -menu.hint_record_timer Configure record by timer options -menu.hint_record_apids Configure audio pids to record -menu.hint_record_timebefore Start record before event start\nin minutes -menu.hint_record_timeafter Stop record after event end\nin minutes -menu.hint_record_zap Switch to channel to be recorded\nat record announce -menu.hint_record_zap_pre_time For ZapTo timers, switch channel\nbefore event start, in minutes -menu.hint_record_apid_std Record first audio pid -menu.hint_record_apid_alt Record alternative non-AC3 audio pids -menu.hint_record_apid_ac3 Record AC3 audio pids -menu.hint_record_tdir Select directory to save timeshift recordings\nin temporary timeshift mode -menu.hint_record_timeshift_pause Start timeshift playback in paused mode -menu.hint_record_timeshift_auto Auto start timeshift after channel switch, in seconds -menu.hint_record_timeshift_delete Delete timeshift files after timeshift stop -menu.hint_record_timeshift_temp If off, timeshift started as\nany direct record - -menu.hint_osd_language Select OSD language -menu.hint_timezone Select your timezone -menu.hint_lang_pref Configure preferred audio, EPG\nand subtitle languages +menu.hint_audio_volstep Volume +/- keys increase/decrease step +menu.hint_audioplayer_defdir Default audioplayer directory +menu.hint_audioplayer_follow Move playlist selected pointer\nto current playing song +menu.hint_audioplayer_highprio Increase playback priority +menu.hint_audioplayer_order Change playlist sort order +menu.hint_audioplayer_playlist Show playlist items +menu.hint_audioplayer_repeat Enable playlist repeat when end of list reached +menu.hint_audioplayer_sc_metadata Enable streaming audio metadata parsing +menu.hint_audioplayer_screensaver Set screensaver timeout, in minutes +menu.hint_audioplayer_title Enable SMS-style title search in playlist menu.hint_auto_lang Auto-switch audio to preferred language -menu.hint_pref_lang Select preferred audio and EPG language\nselect 'none' to disable menu.hint_auto_subs Auto-start subtitles for preferred language -menu.hint_pref_subs Select preferred subtitle language\nselect 'none' to disable - +menu.hint_back Return to previous menu\nPress menu key to close all menus +menu.hint_backup Backup configs and channels to selected dir +menu.hint_bedit Edit favorites and bouquets +menu.hint_bigwindows Always show big epg detail window\nelse 'info' button switch big font + window size +menu.hint_cache_txt Start teletext caching after channel switch +menu.hint_cec_mode CEC mode +menu.hint_cec_standby CEC standby +menu.hint_cec_view_on CEC view ON +menu.hint_channellist_colored Use different color for current or next event +menu.hint_channellist_epg_align EPG event align +menu.hint_channellist_extended Show current event progress bar +menu.hint_channellist_fonts Change channel list font sizes +menu.hint_channellist_foot Show additional information\nin bottom box +menu.hint_channellist_setup Configure channe list GUI options +menu.hint_ci Conditional access menu\nto setup your CI CAM or embeded Conax card menu.hint_colors Configure GUI colors -menu.hint_theme Select Select pre-defined color theme\nSave or load theme from files -menu.hint_head_back Change GUI title background color -menu.hint_head_textcolor Change GUI window title text color menu.hint_content_back Change GUI window background color menu.hint_content_textcolor Change GUI window text color +menu.hint_contrast_fonts Make fonts contrast (do not blend with background) +menu.hint_dboxinfo Information about box cpu and storage +menu.hint_delete_channels Remove all channels +menu.hint_epg_cache Maximum days to cache for future events +menu.hint_epg_dir Select directory on harddisk or usb flash\nto save EPG. +menu.hint_epg_extendedcache Maximum hours to cache extended\nevents descriptions +menu.hint_epg_fonts Change EPG details window font sizes +menu.hint_epg_max_events Maximum events to cache. After reaching limit\nEPG cache will remove future events +menu.hint_epg_old_events Hours after event end time to consider\nevent old and remove it from cache +menu.hint_epg_save Save cached EPG to harddisk or usb flash\nand load it after boot +menu.hint_event_textcolor Change event color for colored-event options\nin channel list and infobar +menu.hint_eventlist_fonts Change event list font sizes +menu.hint_extended Power saving, EPG save/load options\nHDMI-CEC, Start channel, zap options +menu.hint_factory Reset box to factory state\nBox will reboot after reset +menu.hint_fade Fade GUI windows +menu.hint_fan_speed Control fan speed +menu.hint_filebrowser_denydirectoryleave Deny filebrowser to leave initial directory +menu.hint_filebrowser_showrights Show file permissions in file browser +menu.hint_fileplay Play various video files +menu.hint_filesystem_is_utf8 Filebrowser filesystem encoding +menu.hint_font_gui Select font file to use for GUI +menu.hint_font_scaling Set global vertical and horizontal\nGUI font scaling +menu.hint_font_ttx Select font file to use for teletext +menu.hint_fonts Configure GUI fonts and font sizes +menu.hint_gamelist_fonts Change games and scripts list font sizes +menu.hint_games Show list of installed games +menu.hint_hdd Format / check hard disk drive +menu.hint_hdd_apply Apply sleep/noise parameters +menu.hint_hdd_check Check filesystem (fsck) +menu.hint_hdd_format Create HDD partition and format it +menu.hint_hdd_noise Set Automatic Acoustic Management\nnot all drives support this +menu.hint_hdd_sleep Select time to stop hdd on inactivity +menu.hint_hdd_tools Initialize HDD, check filesystem +menu.hint_head_back Change GUI title background color +menu.hint_head_textcolor Change GUI window title text color +menu.hint_imageinfo Information about installed software +menu.hint_inact_timer Shutdown box after inactivity menu.hint_inactive_back Change inactive item background color menu.hint_inactive_textcolor Change inactive item text color +menu.hint_inet_radio Internet radio +menu.hint_info Information about image, box cpu and storage,\nstream information +menu.hint_infobar_back Change infobar background color +menu.hint_infobar_casys On: display all with colored active, mini: single\nlocked icon, descreet: all active ca-sys +menu.hint_infobar_colored_event Use different color for current or next event +menu.hint_infobar_dd Show DD icon +menu.hint_infobar_filesys Show flash and HDD used space levels +menu.hint_infobar_fonts Change infobar font sizes +menu.hint_infobar_logo Logo / signal options +menu.hint_infobar_logo_dir Select directory to search for channels logo +menu.hint_infobar_on_epg Show infobar on current EPG event change +menu.hint_infobar_radiotext Show radiotext window +menu.hint_infobar_res Show channel resolution icons +menu.hint_infobar_sat Show current satellite or cable provider +menu.hint_infobar_setup Configure infobar options +menu.hint_infobar_textcolor Change infobar text color +menu.hint_infobar_tuner Show active tuner number icon +menu.hint_keep_numbers Keep channel numbers over next scans\nand bouquets editing +menu.hint_key_addrecord Assign button to add record timer\nfrom event list +menu.hint_key_addremind Assign button to add zap timer\nfrom event list +menu.hint_key_audio On: 'audio' button start show audio-play menu\nOff: 'audio' button show Audio selection +menu.hint_key_binding Re-define keys used for common operations +menu.hint_key_bouquetdown Assign button to switch channel list\nto previous bouquet +menu.hint_key_bouquetup Assign button to switch channel list\nto next bouquet +menu.hint_key_cancel Assign button to close GUI window +menu.hint_key_channel_sms If enabled, numeric buttons in channel list\nused to search channel in SMS style +menu.hint_key_channeldown Assign button for fast switch to previous\nchannel in channel list +menu.hint_key_channellist Configure keybingdings for channel list +menu.hint_key_channelup Assign button for fast switch to next\nchannel in channel list +menu.hint_key_hardware Change remote control type +menu.hint_key_history Assign button to show channel\nchannel switch history +menu.hint_key_lastchannel Assign button for fast zap to\nprevious channel in history +menu.hint_key_left_exit Allow return to previous menu with 'left' key +menu.hint_key_list_end Assign button to go do list end +menu.hint_key_list_start Assign button to go to list start +menu.hint_key_load Load keybindings from file +menu.hint_key_modechange Change TV/Radio mode and standby keys +menu.hint_key_movieplayer Configure keybingdings for movie player +menu.hint_key_mpaudio Assign button to show audio selection\nin record/file playback mode +menu.hint_key_mpbookmark Assign button to create bookmark\nwhile playing record +menu.hint_key_mpforward Assign button to fast forward record playback +menu.hint_key_mppause Assign button to pause record/file playback +menu.hint_key_mpplay Assign button to resume record/file playback +menu.hint_key_mpplugin Assign button to start selected plugin\nwhile playing record/file +menu.hint_key_mprewind Assign button to rewind record playback +menu.hint_key_mpstop Assign button to stop record/file playback +menu.hint_key_mptime Assign button to show play time\nleft time +menu.hint_key_mptimeshift Assign button to start timeshift +menu.hint_key_pagedown Assign button to show next items page +menu.hint_key_pageup Assign button to show previous items page +menu.hint_key_poweroff Assign button to switch power state\n (standby/deepstandby <-> running) +menu.hint_key_quickzap Configure keybingdings for quick\nchannel switch +menu.hint_key_repeatblock Delay after button press and before\nfirst key repeat +menu.hint_key_repeatblockgeneric Delay between key repeats\nwhile button pressed +menu.hint_key_right Select 'right' function in live TV/Radio mode +menu.hint_key_save Save keybindings to file +menu.hint_key_screenshot Assign button to save GUI and/or TV screenshot +menu.hint_key_sort Assign button to change channel list sort order +menu.hint_key_subchanneldown Assign button for fast switch\n to previous subchannel +menu.hint_key_subchannelup Assign button for fast switch\n to next subchannel +menu.hint_key_transponder Assign button to show channel list\nfor current transponder +menu.hint_key_tvradiomode Assign button to switch TV <> Radio mode +menu.hint_key_unlock Assign button to unlock box if locked\nTo unlock press 'red', then in next 5 seconds this key +menu.hint_keys Remote control repeat rate\nEdit key bindings +menu.hint_lang_pref Configure preferred audio, EPG\nand subtitle languages +menu.hint_language OSD language, timezone\nPreffered audio and subtitles languages +menu.hint_last_radio Start box on selected channel\nif last mode is Radio +menu.hint_last_tv Start box on selected channel\nif last mode is TV +menu.hint_last_use Start box on last used channel +menu.hint_leds_blink Blink LEDS in deep-standby +menu.hint_leds_deepstandby LEDs state in deeps-standby mode +menu.hint_leds_record LEDs state when box recording +menu.hint_leds_standby LEDs state in soft-standby mode +menu.hint_leds_tv Working LEDs state +menu.hint_load Load Neutrino-HD GUI settings from file +menu.hint_make_hdlist Auto-create HD channel list based on\nchannel type and name +menu.hint_make_newlist Create list of recently added channels +menu.hint_make_removedlist Create list of recently removed channels +menu.hint_manage_settings Backup, restore, revert to defaults\nFactory box reset +menu.hint_mb Your recordings +menu.hint_media Play movies, audio files\nWatch pictures +menu.hint_menu_fonts Change menu font sizes +menu.hint_menu_hints Show this hints. Also you can switch\nit any time using 'help' button +menu.hint_menu_pos Select menu position +menu.hint_misc_cec HDMI-CEC Options +menu.hint_misc_channellist HD/New/Removed channel lists\nZap cycle +menu.hint_misc_energy Enable soft-standby, delayed shutdown\ninactivity timers +menu.hint_misc_epg Save/load EPG options, EPG cache options\nEPG save directory +menu.hint_misc_filebrowser Filesystem encoding, file rights\ndeny directory leave +menu.hint_misc_general Start to standby, cache teletext, swp rotor\nplugin hdd dir +menu.hint_misc_zapit Initial TV/Radio channels +menu.hint_movie Play movies +menu.hint_net_broadcast Enter broadcast address\nif unsure, use IP address with last .255 +menu.hint_net_dhcp Use DHCP server to auto-configure +menu.hint_net_djmount mount uPnp devices as filesystem\nunder /media/00upnp +menu.hint_net_ftpd Enable file transfer using FTP +menu.hint_net_gateway Enter gateway/router IP address +menu.hint_net_hostname Change your box hostname +menu.hint_net_if Select interface to config +menu.hint_net_ipaddress Enter your box IP address +menu.hint_net_mount Configure, mount and un-mount network shares\nNFS and CIFS supported +menu.hint_net_nameserver Enter name server (DNS) IP address +menu.hint_net_netmask Enter network mask\nif unsure, use 255.255.255.0 +menu.hint_net_nfs_mount Configure and mount network shares +menu.hint_net_nfs_umount Un-mount mounted shares +menu.hint_net_ntp Configure time sync +menu.hint_net_ntpenable Enable time sync using NTP protocol\nIf NTP sync not successfull, DVB will be used +menu.hint_net_ntprefresh Time sync interval +menu.hint_net_ntpserver Enter NTP server name +menu.hint_net_pass Enter passkey (WPA-PSK) +menu.hint_net_proxy If you use proxy to access internet\nconfigure it here for online software update +menu.hint_net_proxypass Proxy user password\nif authorization required +menu.hint_net_proxyserver Proxy server name +menu.hint_net_proxyuser Proxy user name\nif authorization required +menu.hint_net_services Configure network services:\nTelnet, ftp, uPnp +menu.hint_net_setupnow Apply current settings +menu.hint_net_setuponstartup Start network at boot time +menu.hint_net_show Show current network settings +menu.hint_net_ssid Enter SSID of wireless network\nyou want to connect to +menu.hint_net_telnet Enable telnet login to your box +menu.hint_net_test Test network connection: ping gateway,\n name server and external IP +menu.hint_net_ushare Share connected HDD over uPnp +menu.hint_network IP address, gateway, DNS, Time sync\nNetwork shares and services +menu.hint_new_zap_mode Allow channel switch while browsing\n(toggle mode with 'mute' in channel list) +menu.hint_osd Colors, fonts, screen size\nGUI look and feel options +menu.hint_osd_language Select OSD language +menu.hint_osd_preset Pre-configured screen margins for CRT and LCD TV +menu.hint_parentallock_changepin Change PIN code +menu.hint_parentallock_lockage Select age allowed to watch +menu.hint_parentallock_prompt Configure when Neutrino-HD will ask you\nfor PIN code +menu.hint_personalize Enable, disable or Protect menu items\nConfigure color-buttons user menus +menu.hint_pictureviewer_defdir Default picture viewer directory +menu.hint_pictureviewer_scaling Picture scaling algorithm +menu.hint_pictureviewer_slide_time Slideshow interval, in seconds +menu.hint_picview View pictures +menu.hint_plugins_hdd_dir Select directory to load\nplugins from +menu.hint_power_leds Configure power-button LEDs behavior +menu.hint_pref_lang Select preferred audio and EPG language\nselect 'none' to disable +menu.hint_pref_subs Select preferred subtitle language\nselect 'none' to disable +menu.hint_progressbar_color Show colored progress bars +menu.hint_protection Protect content by PIN code\nDefault PIN 0000 +menu.hint_radiomode Switch box to radio mode +menu.hint_reboot Reboot box\nNo confirmation +menu.hint_record_apid_ac3 Record AC3 audio pids +menu.hint_record_apid_alt Record alternative non-AC3 audio pids +menu.hint_record_apid_std Record first audio pid +menu.hint_record_apids Configure audio pids to record +menu.hint_record_apply Apply record options +menu.hint_record_chandir Create directory with name of channel\nto store recording +menu.hint_record_dir Select directory to store recordings +menu.hint_record_end Stop direct record after max. time\nor after current event end time +menu.hint_record_tdir Select directory to save timeshift recordings\nin temporary timeshift mode +menu.hint_record_time Record time before stop when\nusing direct record with record button +menu.hint_record_timeafter Stop record after event end\nin minutes +menu.hint_record_timebefore Start record before event start\nin minutes +menu.hint_record_timer Configure record by timer options +menu.hint_record_timeshift Configure timeshift options +menu.hint_record_timeshift_auto Auto start timeshift after channel switch, in seconds +menu.hint_record_timeshift_delete Delete timeshift files after timeshift stop +menu.hint_record_timeshift_pause Start timeshift playback in paused mode +menu.hint_record_timeshift_temp If off, timeshift started as\nany direct record +menu.hint_record_zap Switch to channel to be recorded\nat record announce +menu.hint_record_zap_pre_time For ZapTo timers, switch channel\nbefore event start, in minutes +menu.hint_recording Recording and timeshift options\nTimers safety, audio pids options +menu.hint_reload_channels Reload channels from flash +menu.hint_reload_plugins Reload plugins from flash +menu.hint_reset Reset Neutrino-HD GUI settings to defaults\nTuner config and channels not affected +menu.hint_restore Restore files from selected backup +menu.hint_rotor_swap Swap rotor east/west directions\nin motor control +menu.hint_rounded_corners Draw round or rectangular windows corners +menu.hint_save_settings Save all settings to flash +menu.hint_saveas Save Neutrino-HD GUI settings to file +menu.hint_scan_auto Auto-scan selected provider +menu.hint_scan_autoall Scan several selected providers at once +menu.hint_scan_autoall_select Add selected satellites to scan +menu.hint_scan_bouquet Update: add to current bouquets, erase:\nremove old bouquets, leave: dont add or change +menu.hint_scan_cable Select cable network to scan +menu.hint_scan_cable_simple Cable scan with optional\nprovider channel numbering +menu.hint_scan_commited Select commited input for\nthis satellite +menu.hint_scan_diseqc Select diseqc switch input for\nthis satellite +menu.hint_scan_diseqcrepeat Diseqc repeat for cascaded switches +menu.hint_scan_diseqctype Select your diseqc switch protocol\nwith 'advanced' you can use uncommited switches +menu.hint_scan_fast CanalDigitaal/TéléSAT/TV Vlaanderen provider scan\nWARNING: diseqc config will be overwritten +menu.hint_scan_fastprov Select provider to scan +menu.hint_scan_fasttype Select fast scan type +menu.hint_scan_fec Select transponder FEC +menu.hint_scan_femode Select second tuner connection type +menu.hint_scan_fesetup Configure tuner(s) +menu.hint_scan_fetimeout Time to wait for signal, in 1/10 of second +menu.hint_scan_freq Enter transponder frequency +menu.hint_scan_fta Add only free-to-air (not-scrambled) channels +menu.hint_scan_ladirection Select latitude direction +menu.hint_scan_latitude Enter your latitude +menu.hint_scan_lnbconfig Configure LNB parameters for this satellite +menu.hint_scan_lodirection Select longtitude direction +menu.hint_scan_lofh High banb LNB frequency +menu.hint_scan_lofl Low band LNB frequency +menu.hint_scan_lofs Band switch LNB frequency +menu.hint_scan_logical Use provider's channel numbering +menu.hint_scan_logical_hd If both SD and HD channel versions present\nput HD to the top of list +menu.hint_scan_longitude Enter your longtitude +menu.hint_scan_manual Manual transponder scan using\nselected parameters +menu.hint_scan_mod Select transponder modulation +menu.hint_scan_motor_speed Rotor moving speed in 1/10 degree\nper second +menu.hint_scan_motorpos Select stored position number for\nthis satellite +menu.hint_scan_nid Enter decimal network ID +menu.hint_scan_nit Add transpoders from network information +menu.hint_scan_pids Scan and save audio/video/PMT PIDs +menu.hint_scan_pol Select transponder polarization +menu.hint_scan_rate Enter transponder symbol rate +menu.hint_scan_reset_numbers Reset exising channel numbers\nand re-number channels after scan +menu.hint_scan_satadd Add satellites for this frontend +menu.hint_scan_satellite Select satellite to scan +menu.hint_scan_satenable Enable satellite for this frontend +menu.hint_scan_satfind Satellite finder: manually drive your rotor\nto setup stored positions +menu.hint_scan_satfind_start Start Satellite finder +menu.hint_scan_satscan Scan selected satellite +menu.hint_scan_satselect Select satellite +menu.hint_scan_satsetup Configure satellites options +menu.hint_scan_savesettings Save tuner config and scan settings\nAlso saved, if you start service scan +menu.hint_scan_scantype Select, which channel types to scan +menu.hint_scan_setup_fe Configure selected frontend options +menu.hint_scan_start Start scan. You can use 'exit' button to stop +menu.hint_scan_test Test signal for this transponder +menu.hint_scan_tpselect Select transponder to scan +menu.hint_scan_uncommited Select uncommited input for\nthis satellite +menu.hint_scan_usals_repeat Repeat usals move rotor commands\nif you expirience unstable rotor move +menu.hint_scan_usalsall Set/unset usals flag for all satellites +menu.hint_scan_useusals Use USALS for\nthis satellite +menu.hint_scrambled_message Show scrambled message, when channel cannot be decoded +menu.hint_screen_setup Configure screen margins +menu.hint_screenshot_count When no GUI on screen, you can save 1-5\nscreenshot serie +menu.hint_screenshot_cover ON: When playing record, overwrite single\nscreenshot to show inside MovieBrowser +menu.hint_screenshot_dir Select directory to save screenshots +menu.hint_screenshot_format File format to save screenshot +menu.hint_screenshot_res Screenshot size: current channel's video size\nor OSD size (1280x720) +menu.hint_screenshot_scale For video+OSD screenshots, scale to video size +menu.hint_screenshot_setup Configure screenshots options +menu.hint_screenshot_video Include live video in screenshot +menu.hint_scripts Run scripts menu.hint_selected_back Change selected item background color menu.hint_selected_text Change selected item text color -menu.hint_infobar_back Change infobar background color -menu.hint_infobar_textcolor Change infobar text color -menu.hint_event_textcolor Change event color for colored-event options\nin channel list and infobar -menu.hint_fonts Configure GUI fonts and font sizes - +menu.hint_service Tuner setup, service scan,\nbouquet editor, software upgrade +menu.hint_service_scan Tuner setup, service scan +menu.hint_settings Configure Neutrino-HD\nNetwork, audio, video, OSD and more +menu.hint_show_mute_icon Show mute icon, when volume set to 0 +menu.hint_shutdown Put your box in deep standby mode\nNo confirmation +menu.hint_shutdown_count Time to put box in deep-standby\nfrom soft-standby mode +menu.hint_shutdown_rcdelay Enable deep-standby, if power button\npressed more than 1 second +menu.hint_shutdown_real Enable soft-standby mode\nIf disabled, power button put box to deep-standby +menu.hint_sleeptimer Set timer to put your box\nin sleep mode +menu.hint_soft_restart Restart Neutrino-HD without reboot +menu.hint_softupdate_check In the Internet or local check for available updates +menu.hint_softupdate_expert Separate partitions from the flash read / write to the flash +menu.hint_softupdate_expert_read Separate partitions (U-Boot, Splash, Kernel, SystemFS) from the flash read +menu.hint_softupdate_expert_write Separate partitions (Splash, Kernel, SystemFS) write to the flash +menu.hint_softupdate_settings Update mode, the local directory and the configuration file to set +menu.hint_start_tostandby Enter standby mode after boot +menu.hint_streaminfo Current channel info: pids, signal and noise ratio\nBitrate graphs +menu.hint_subchannel_pos Select subchannels menu position +menu.hint_sw_update Update software +menu.hint_theme Select pre-defined color theme\nSave or load theme from files +menu.hint_timeouts Configure time to hide GUI windows\nin seconds +menu.hint_timers Add/Remove/Edit scheduled\nrecording, reminders etc. +menu.hint_timezone Select your timezone +menu.hint_tvmode Switch box to TV mode +menu.hint_tvradio_switch Switches between TV and Radio mode +menu.hint_vfd Frontpanel LEDS, VFD options +menu.hint_vfd_brightness Working brightness +menu.hint_vfd_brightness_setup Configure frontpanel display brightness\nfor different modes +menu.hint_vfd_brightnessdeepstandby Brightness in deep-standby mode +menu.hint_vfd_brightnessdim Auto-dim brightness +menu.hint_vfd_brightnessstandby Brightness in soft-standby mode +menu.hint_vfd_defaults Restore default brightness values +menu.hint_vfd_dimtime Auto-dim time, in seconds +menu.hint_vfd_infoline Choose what to display in main VFD line +menu.hint_vfd_statusline Choose what to display in short\nVFD status line +menu.hint_video Video output, resolution, format\nAspect ratio, fast mode switch options +menu.hint_video_43mode Display mode for 4:3 content\non 16:9 TV +menu.hint_video_analog_mode Select analog output mode\nfor SCART and CINCH connectors +menu.hint_video_cinch_mode Select analog output mode for\ncomposite video out +menu.hint_video_dbdr MPEG2 enhancement filters +menu.hint_video_format TV aspect ratio +menu.hint_video_mode HDMI output video mode +menu.hint_video_modes VF key will cycle between enabled modes +menu.hint_video_scart_mode Select analog output mode for SCART connectors +menu.hint_volume_digits Numeric display of the volumebar on/off +menu.hint_volume_pos Select volume indicator position +menu.hint_zap_cycle When swithing channels, stay in current bouquet menu.next Next (press Menu to quit) messagebox.back Back messagebox.cancel Cancel @@ -928,12 +1100,12 @@ miscsettings.infobar_casystem_mini mini miscsettings.infobar_casystem_mode discreet miscsettings.infobar_colored_events Program colored miscsettings.infobar_disp_0 without Logo -miscsettings.infobar_disp_1 Logo 1 -miscsettings.infobar_disp_2 Logo 2 -miscsettings.infobar_disp_3 Logo 3 -miscsettings.infobar_disp_4 Logo 4 -miscsettings.infobar_disp_5 Logo 5 -miscsettings.infobar_disp_6 Logo 6 +miscsettings.infobar_disp_1 Logo in number box +miscsettings.infobar_disp_2 Logo+channel number +miscsettings.infobar_disp_3 Logo+channel name+signal +miscsettings.infobar_disp_4 Logo+channel name/number +miscsettings.infobar_disp_5 Logo+signal +miscsettings.infobar_disp_6 Logo+channel number+signal miscsettings.infobar_disp_log Logo miscsettings.infobar_logo_hdd_dir Logo dir miscsettings.infobar_sat_display Satellite display on infobar @@ -1151,14 +1323,14 @@ networkmenu.ntpserver NTP-Server networkmenu.ntpserver_hint1 NTP-Server example: ntp1.ptb.de networkmenu.ntpserver_hint2 need reboot or epg-reset networkmenu.ntptitle Time-Syncronisation -networkmenu.password Key +networkmenu.password Pre-Shared Key (PSK) networkmenu.reset_settings_now Do you want restore the previous settings? networkmenu.select_if Interface networkmenu.services Network services networkmenu.setupnow Apply network settings now networkmenu.setuponstartup Setup network on startup networkmenu.show Show active Network settings -networkmenu.ssid Network name +networkmenu.ssid Network name (SSID) networkmenu.test Test network now neutrino_starting Neutrino-HD starting... nfs.alreadymounted directory already mounted @@ -1290,7 +1462,7 @@ rclock.lockmsg Your box remote control will be locked.\n To unlock it, press - + - + - + - + @@ -1425,7 +1425,7 @@ - + @@ -1433,13 +1433,13 @@ - + - + @@ -1452,8 +1452,8 @@ - - + + @@ -1465,7 +1465,7 @@ - + @@ -1557,6 +1557,7 @@ + @@ -1569,16 +1570,23 @@ + + + + + + - + + @@ -1591,8 +1599,9 @@ - + + @@ -1620,7 +1629,7 @@ - + diff --git a/data/scripts/backup.sh b/data/scripts/backup.sh index d9998007e..2ab6bcf7e 100755 --- a/data/scripts/backup.sh +++ b/data/scripts/backup.sh @@ -24,4 +24,4 @@ TOBACKUP=$(echo $RES) echo Backup to $1/settings_$DATE.tar -tar -cf $1/settings_$DATE.tar $TOBACKUP +tar -cf $1/settings_$DATE.tar $TOBACKUP 2>&1 >/dev/null diff --git a/lib/libcoolstream/record_cs.h b/lib/libcoolstream/record_cs.h index 51b28bfe6..e139495f2 100644 --- a/lib/libcoolstream/record_cs.h +++ b/lib/libcoolstream/record_cs.h @@ -5,6 +5,7 @@ /* */ /* (C) 2008 CoolStream International */ /* */ +/* $Id:: $ */ /*******************************************************************************/ #ifndef __RECORD_CS_H_ #define __RECORD_CS_H_ @@ -17,9 +18,7 @@ class cRecord { private: cRecordData * rd; bool enabled; - int num_apids; int unit; - int nRecordFD; public: cRecord(int num = 0); @@ -27,11 +26,9 @@ public: bool Open(); void Close(void); - bool Start(int fd, unsigned short vpid, unsigned short * apids, int numapids); + bool Start(int fd, unsigned short vpid, unsigned short * apids, int numapids, uint64_t chid); bool Stop(void); bool AddPid(unsigned short pid); - /* not tested */ - bool ChangePids(unsigned short vpid, unsigned short * apids, int numapids); }; #endif // __RECORD_CS_H_ diff --git a/lib/libnet/libnet.c b/lib/libnet/libnet.c index 9eb1cb679..87a0ef294 100644 --- a/lib/libnet/libnet.c +++ b/lib/libnet/libnet.c @@ -9,6 +9,8 @@ #include #include +#if 0 +//never used static void scanip( char *str, unsigned char *to ) { int val; @@ -80,7 +82,7 @@ abbruch: return rc; } - +#endif void netGetIP( char *dev, char *ip, char *mask, char *brdcast ) { int fd; @@ -114,7 +116,8 @@ void netGetIP( char *dev, char *ip, char *mask, char *brdcast ) close(fd); return; } - +#if 0 +//never used void netSetDefaultRoute( char *gw ) { struct rtentry re; @@ -149,7 +152,7 @@ void netSetDefaultRoute( char *gw ) close(fd); return; } - +#endif void netGetDefaultRoute( char *ip ) { FILE *fp; @@ -175,11 +178,12 @@ void netGetDefaultRoute( char *ip ) fclose(fp); } -static char dombuf[256]; static char hostbuf[256]; -static char domis=0; static char hostis=0; - +#if 0 +static char dombuf[256]; +static char domis=0; +//never used char *netGetDomainname( void ) { if (!domis) @@ -194,7 +198,7 @@ void netSetDomainname( char *dom ) domis=1; setdomainname(dombuf,strlen(dombuf)+1); } - +#endif char *netGetHostname( void ) { if (!hostis) diff --git a/lib/libtuxtxt/tuxtxt.cpp b/lib/libtuxtxt/tuxtxt.cpp index 346210d4f..c629daa6a 100644 --- a/lib/libtuxtxt/tuxtxt.cpp +++ b/lib/libtuxtxt/tuxtxt.cpp @@ -236,12 +236,13 @@ void ClearFB(int /*color*/) //memset(lfb,0, var_screeninfo.yres*fix_screeninfo.line_length); CFrameBuffer::getInstance()->paintBackground(); } - +#if 0 +//never used void ClearB(int color) { FillRect(0,0,var_screeninfo.xres,var_screeninfo.yres*2,color); } - +#endif int GetCurFontWidth() { int mx = (displaywidth)%(40-nofirst); // # of unused pixels diff --git a/lib/sectionsdclient/sectionsdclient.cpp b/lib/sectionsdclient/sectionsdclient.cpp index 97eadb83d..6d6da6b4b 100644 --- a/lib/sectionsdclient/sectionsdclient.cpp +++ b/lib/sectionsdclient/sectionsdclient.cpp @@ -375,6 +375,8 @@ CChannelEventList CSectionsdClient::getChannelEvents(const bool tv_mode, t_chann 3: keyword search in EPG description (INFO2) In case of a match, the EPG event is added to the Eventlist eList. */ +#if 0 +//never used bool CSectionsdClient::getEventsServiceKeySearchAdd(CChannelEventList& eList,const t_channel_id channel_id,char search_typ,std::string& search_text) { int nBufSize=0; @@ -435,7 +437,7 @@ bool CSectionsdClient::getEventsServiceKeySearchAdd(CChannelEventList& eList,con close_connection(); return true; } - +#endif CChannelEventList CSectionsdClient::getEventsServiceKey(const t_channel_id channel_id) { CChannelEventList eList; @@ -479,6 +481,8 @@ CChannelEventList CSectionsdClient::getEventsServiceKey(const t_channel_id chann close_connection(); return eList; } +#if 0 +//never used void showhexdumpa (char *label, unsigned char * from, int len) { int i, j, k; @@ -519,7 +523,7 @@ void showhexdumpa (char *label, unsigned char * from, int len) } printf ("\n"); } - +#endif // 21.07.2005 - rainerk // Convert line-terminated extended events to vector of strings char * CSectionsdClient::parseExtendedEvents(char * dp, CEPGData * epgdata) { diff --git a/lib/sectionsdclient/sectionsdclient.h b/lib/sectionsdclient/sectionsdclient.h index d42e99237..4065ffc2d 100644 --- a/lib/sectionsdclient/sectionsdclient.h +++ b/lib/sectionsdclient/sectionsdclient.h @@ -72,6 +72,7 @@ class CSectionsdClient : private CBasicClient char * parseExtendedEvents(char * dp, CEPGData * epgdata); public: + virtual ~CSectionsdClient() {}; enum SIlanguageMode_t { ALL, FIRST_FIRST, diff --git a/lib/timerdclient/timerdclient.h b/lib/timerdclient/timerdclient.h index 6b763c7c5..f9e66625b 100644 --- a/lib/timerdclient/timerdclient.h +++ b/lib/timerdclient/timerdclient.h @@ -41,6 +41,7 @@ class CTimerdClient:private CBasicClient virtual const char * getSocketName() const; public: + virtual ~CTimerdClient() {}; enum events { EVT_SHUTDOWN = 1, diff --git a/src/daemonc/remotecontrol.cpp b/src/daemonc/remotecontrol.cpp index f057ceec8..d6659148d 100644 --- a/src/daemonc/remotecontrol.cpp +++ b/src/daemonc/remotecontrol.cpp @@ -520,13 +520,13 @@ void CRemoteControl::processAPIDnames() if ( current_PIDs.APIDs[count].is_ac3 ) { if(!strstr(current_PIDs.APIDs[count].desc, " (AC3)")) - strncat(current_PIDs.APIDs[count].desc, " (AC3)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[count].desc)); + strncat(current_PIDs.APIDs[count].desc, " (AC3)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[count].desc)-1); has_ac3 = true; if(g_settings.audio_DolbyDigital && (ac3_found < 0)) ac3_found = count; } else if (current_PIDs.APIDs[count].is_aac && !strstr(current_PIDs.APIDs[count].desc, " (AAC)")) - strncat(current_PIDs.APIDs[count].desc, " (AAC)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[count].desc)); + strncat(current_PIDs.APIDs[count].desc, " (AAC)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[count].desc)-1); } if ( has_unresolved_ctags ) @@ -548,11 +548,11 @@ void CRemoteControl::processAPIDnames() // workaround for buggy ZDF ctags / or buggy sectionsd/drivers , who knows... if(!tags[i].component.empty()) { - strncpy(current_PIDs.APIDs[j].desc, tags[i].component.c_str(), DESC_MAX_LEN); + strncpy(current_PIDs.APIDs[j].desc, tags[i].component.c_str(), DESC_MAX_LEN-1); if (current_PIDs.APIDs[j].is_ac3 && !strstr(current_PIDs.APIDs[j].desc, " (AC3)")) - strncat(current_PIDs.APIDs[j].desc, " (AC3)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[j].desc)); + strncat(current_PIDs.APIDs[j].desc, " (AC3)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[j].desc)-1); else if (current_PIDs.APIDs[j].is_aac && !strstr(current_PIDs.APIDs[j].desc, " (AAC)")) - strncat(current_PIDs.APIDs[j].desc, " (AAC)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[j].desc)); + strncat(current_PIDs.APIDs[j].desc, " (AAC)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[j].desc)-1); } current_PIDs.APIDs[j].component_tag = -1; break; diff --git a/src/driver/Makefile.am b/src/driver/Makefile.am index 430651655..617c4be36 100644 --- a/src/driver/Makefile.am +++ b/src/driver/Makefile.am @@ -18,24 +18,24 @@ noinst_LIBRARIES = libneutrino_driver.a libneutrino_driver_netfile.a libneutrino_driver_a_SOURCES = \ abstime.c \ + audiofile.cpp \ + audiometadata.cpp \ + audioplay.cpp \ + fade.cpp \ + fb_window.cpp \ + file.cpp \ fontrenderer.cpp \ framebuffer.cpp \ - fb_window.cpp \ + genpsi.c \ + radiotext.cpp \ + radiotools.cpp \ rcinput.cpp \ record.cpp \ - audioplay.cpp \ - screen_max.cpp \ - file.cpp \ - audiometadata.cpp \ - audiofile.cpp \ - shutdown_count.cpp \ - genpsi.c \ - streamts.cpp \ - radiotools.cpp \ - radiotext.cpp \ - fade.cpp \ - screenshot.cpp \ ringbuffer.c \ + screen_max.cpp \ + screenshot.cpp \ + shutdown_count.cpp \ + streamts.cpp \ volume.cpp if BOXTYPE_COOL diff --git a/src/driver/audiodec/Makefile.am b/src/driver/audiodec/Makefile.am index 7e73469a1..c21b2c4d0 100644 --- a/src/driver/audiodec/Makefile.am +++ b/src/driver/audiodec/Makefile.am @@ -27,10 +27,10 @@ endif libneutrino_driver_audiodec_a_SOURCES = \ basedec.cpp \ cdrdec.cpp \ + crc.c \ + $(FLACdec) \ mp3dec.cpp \ oggdec.cpp \ - wavdec.cpp \ - $(FLACdec) \ tag.c \ - crc.c \ - vis.cpp + vis.cpp \ + wavdec.cpp diff --git a/src/driver/audiodec/flacdec.cpp b/src/driver/audiodec/flacdec.cpp index ed114dc50..242337945 100644 --- a/src/driver/audiodec/flacdec.cpp +++ b/src/driver/audiodec/flacdec.cpp @@ -81,12 +81,13 @@ FLAC__StreamDecoderSeekStatus flac_seek(const FLAC__StreamDecoder *, FLAC__uint6 else return FLAC__STREAM_DECODER_SEEK_STATUS_OK; } - +#if 0 +//never used int flac_close(void *) { return 0; } - +#endif FLAC__StreamDecoderTellStatus flac_tell(const FLAC__StreamDecoder *, FLAC__uint64 *absolute_byte_offset, void *client_data) { CFlacDec * flacdec = (CFlacDec *)client_data; diff --git a/src/driver/audiodec/int_fft.c b/src/driver/audiodec/int_fft.c index 5f8a7f62d..d44aa66fe 100644 --- a/src/driver/audiodec/int_fft.c +++ b/src/driver/audiodec/int_fft.c @@ -84,6 +84,8 @@ fixed fix_mpy(fixed a, fixed b); size of data = 2**m set inverse to 0=dft, 1=idft */ +#if 0 +//never used int fix_fft(fixed fr[], fixed fi[], int m, int inverse) { int mr,nn,i,j,l,k,istep, n, scale, shift; @@ -180,7 +182,7 @@ fix_mpy(wi,fr[j]); return scale; } - +#endif /* window() - apply a Hanning window */ void window(fixed fr[], int n) @@ -203,6 +205,8 @@ void window(fixed fr[], int n) was obtained from an inverse FFT, 0 otherwise. loud[] is the loudness, in dB wrt 32767; will be +10 to -N_LOUD. */ +#if 0 +//never used void fix_loud(fixed loud[], fixed fr[], fixed fi[], int n, int scale_shift) { int i, max; @@ -218,7 +222,7 @@ void fix_loud(fixed loud[], fixed fr[], fixed fi[], int n, int scale_shift) loud[i] = max; } } - +#endif /* db_from_ampl() - find loudness (in dB) from the complex amplitude. */ @@ -258,6 +262,8 @@ fixed fix_mpy(fixed a, fixed b) /* iscale() - scale an integer value by (numer/denom) */ +#if 0 +//never used int iscale(int value, int numer, int denom) { #ifdef DOS @@ -338,7 +344,7 @@ overflow: #endif } - +#endif #if N_WAVE != 1024 ERROR: N_WAVE != 1024 diff --git a/src/driver/framebuffer.cpp b/src/driver/framebuffer.cpp index 0ff7020d7..ab4a80c3e 100644 --- a/src/driver/framebuffer.cpp +++ b/src/driver/framebuffer.cpp @@ -510,11 +510,12 @@ int CFrameBuffer::setMode(unsigned int /*nxRes*/, unsigned int /*nyRes*/, unsign } return 0; } - +#if 0 +//never used void CFrameBuffer::setTransparency( int /*tr*/ ) { } - +#endif void CFrameBuffer::setBlendMode(uint8_t mode) { #ifdef HAVE_COOL_HARDWARE @@ -539,14 +540,15 @@ void CFrameBuffer::setBlendLevel(int level) #endif #endif } - +#if 0 +//never used void CFrameBuffer::setAlphaFade(int in, int num, int tr) { for (int i=0; ilfb, 0, thiz->stride * thiz->yRes); } } +#endif void CFrameBuffer::Clear() { paintBackground(); //memset(getFrameBufferPointer(), 0, stride * yRes); } - +#if 0 +//never used void CFrameBuffer::showFrame(const std::string & filename) { std::string varpath = "/var/tuxbox/config/neutrino/icons/"; @@ -1611,7 +1619,7 @@ void CFrameBuffer::showFrame(const std::string & filename) else videoDecoder->ShowPicture((iconBasePath + filename).c_str()); } - +#endif bool CFrameBuffer::Lock() { if(locked) diff --git a/src/driver/netfile.cpp b/src/driver/netfile.cpp index 71d61d2f2..2b6303cb2 100644 --- a/src/driver/netfile.cpp +++ b/src/driver/netfile.cpp @@ -1059,6 +1059,7 @@ FILE *f_open(const char *filename, const char *acctype) for(int i=0; ((ptr != NULL) && (i<25)); ptr = strstr(ptr, "http://") ) { strncpy(servers[i], ptr, 1023); + servers[i][1023] = '\0'; ptr2 = strchr(servers[i], '\n'); if(ptr2) *ptr2 = 0; // change ptr so that next strstr searches in buf and not in servers[i] @@ -1101,7 +1102,7 @@ FILE *f_open(const char *filename, const char *acctype) /* magic, if there is any */ for (int i = 0; i < known_magic_count; i++) { - if (((*(uint32_t *)&(magic[0])) & *(uint32_t *)&(known_magic[i].mask[0])) == *(uint32_t *)&(known_magic[i].mode[0])) + if (((*(unsigned char *)&(magic[0])) & *(unsigned char *)&(known_magic[i].mask[0])) == *(unsigned char *)&(known_magic[i].mode[0])) { f_type(fd, known_magic[i].type); goto magic_found; @@ -1300,6 +1301,7 @@ const char *f_type(FILE *stream, const char *type) { stream_type[i].stream = stream; strncpy(stream_type[i].type, type, 64); + stream_type[i].type[64] = '\0'; dprintf(stderr, "added entry (%s) for %p\n", type, stream); } return type; @@ -1720,7 +1722,8 @@ void ShoutCAST_ParseMetaData(char *md, CSTATE *state) if(!ptr) { ptr = strchr(md, '='); - strncpy(state->title, ptr + 2, 4096); + strncpy(state->title, ptr + 2, 4095); + state->title[4095] = '\0'; ptr = strchr(state->title, ';'); if(ptr) *(ptr - 1) = 0; @@ -1736,7 +1739,8 @@ void ShoutCAST_ParseMetaData(char *md, CSTATE *state) ptr = strstr(md, "StreamTitle="); ptr = strchr(ptr, '\''); - strncpy(state->artist, ptr + 1, 4096); + strncpy(state->artist, ptr + 1, 4095); + state->artist[4095] = '\0'; ptr = strstr(state->artist, " - "); if(!ptr) ptr = strstr(state->artist, ", "); diff --git a/src/driver/pictureviewer/Makefile.am b/src/driver/pictureviewer/Makefile.am index 8c452bc78..c70fcf859 100644 --- a/src/driver/pictureviewer/Makefile.am +++ b/src/driver/pictureviewer/Makefile.am @@ -19,5 +19,8 @@ endif noinst_LIBRARIES = libneutrino_pictureviewer.a libneutrino_pictureviewer_a_SOURCES = \ - pictureviewer.cpp png.cpp bmp.cpp \ - jpeg.cpp gif.cpp crw.cpp + crw.cpp \ + gif.cpp \ + jpeg.cpp \ + pictureviewer.cpp \ + png.cpp bmp.cpp diff --git a/src/driver/rcinput.cpp b/src/driver/rcinput.cpp index a967ff0bc..30f970f71 100644 --- a/src/driver/rcinput.cpp +++ b/src/driver/rcinput.cpp @@ -284,7 +284,8 @@ void CRCInput::restartInput() close(); open(); } - +#if 0 +//never used int CRCInput::messageLoop( bool anyKeyCancels, int timeout ) { neutrino_msg_t msg; @@ -335,6 +336,7 @@ int CRCInput::messageLoop( bool anyKeyCancels, int timeout ) } return res; } +#endif int CRCInput::addTimer(uint64_t Interval, bool oneshot, bool correct_time ) { @@ -1557,7 +1559,8 @@ void CRCInput::close_click() void CRCInput::open_click() { } - +#if 0 +//never used void CRCInput::reset_dsp(int /*rate*/) { } @@ -1565,7 +1568,7 @@ void CRCInput::reset_dsp(int /*rate*/) void CRCInput::set_dsp() { } - +#endif void CRCInput::play_click() { } diff --git a/src/driver/record.cpp b/src/driver/record.cpp index 507c23677..269a4b442 100644 --- a/src/driver/record.cpp +++ b/src/driver/record.cpp @@ -4,12 +4,11 @@ Copyright (C) 2001 Steffen Hehn 'McClean' Copyright (C) 2011 CoolStream International Ltd - License: GPL + License: GPLv2 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. + the Free Software Foundation; This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -50,7 +49,6 @@ #include #include -#include #include #include #include @@ -64,7 +62,6 @@ */ extern CRemoteControl * g_RemoteControl; /* neutrino.cpp */ -t_channel_id rec_channel_id; bool sectionsd_getActualEPGServiceKey(const t_channel_id uniqueServiceKey, CEPGData * epgdata); bool sectionsd_getEPGidShort(event_id_t epgID, CShortEPGData * epgdata); @@ -134,7 +131,7 @@ void CRecordInstance::WaitRecMsg(time_t StartTime, time_t WaitTime) usleep(100000); } -record_error_msg_t CRecordInstance::Start(CZapitChannel * channel /*, APIDList &apid_list*/) +record_error_msg_t CRecordInstance::Start(CZapitChannel * channel) { int fd; std::string tsfile; @@ -142,7 +139,7 @@ record_error_msg_t CRecordInstance::Start(CZapitChannel * channel /*, APIDList & time_t msg_start_time = time(0); CHintBox hintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_RECORDING_START)); hintBox.paint(); - + tsfile = std::string(filename) + ".ts"; printf("%s: file %s vpid %x apid %x\n", __FUNCTION__, tsfile.c_str(), allpids.PIDs.vpid, apids[0]); @@ -175,7 +172,7 @@ record_error_msg_t CRecordInstance::Start(CZapitChannel * channel /*, APIDList & record->Open(); - if(!record->Start(fd, (unsigned short ) allpids.PIDs.vpid, (unsigned short *) apids, numpids)) { + if(!record->Start(fd, (unsigned short ) allpids.PIDs.vpid, (unsigned short *) apids, numpids, channel_id)) { /* Stop do close fd */ record->Stop(); delete record; @@ -193,11 +190,6 @@ record_error_msg_t CRecordInstance::Start(CZapitChannel * channel /*, APIDList & CCamManager::getInstance()->Start(channel->getChannelID(), CCamManager::RECORD); - int len; - unsigned char * pmt = channel->getRawPmt(len); - cCA * ca = cCA::GetInstance(); - ca->SendPMT(channel->getRecordDemux() /*DEMUX_SOURCE_2*/, pmt, len); - //CVFD::getInstance()->ShowIcon(VFD_ICON_CAM1, true); WaitRecMsg(msg_start_time, 2); hintBox.hide(); @@ -219,7 +211,7 @@ bool CRecordInstance::Stop(bool remove_event) time_t end_time = time(0); recMovieInfo->length = (int) round((double) (end_time - start_time) / (double) 60); - + CHintBox hintBox(LOCALE_MESSAGEBOX_INFO, rec_stop_msg.c_str()); hintBox.paint(); @@ -295,7 +287,7 @@ bool CRecordInstance::Update() EPG_AUDIO_PIDS audio_pids; audio_pids.epgAudioPid = allpids.APIDs[i].pid; - audio_pids.epgAudioPidName = g_RemoteControl->current_PIDs.APIDs[i].desc; + audio_pids.epgAudioPidName = allpids.APIDs[i].desc; audio_pids.atype = allpids.APIDs[i].is_ac3 ? 1 : allpids.APIDs[i].is_aac ? 5 : 0; audio_pids.selected = 0; recMovieInfo->audioPids.push_back(audio_pids); @@ -328,7 +320,7 @@ void CRecordInstance::GetPids(CZapitChannel * channel) for (uint32_t i = 0; i < channel->getAudioChannelCount(); i++) { CZapitClient::responseGetAPIDs response; response.pid = channel->getAudioPid(i); - strncpy(response.desc, channel->getAudioChannel(i)->description.c_str(), DESC_MAX_LEN); + strncpy(response.desc, channel->getAudioChannel(i)->description.c_str(), DESC_MAX_LEN - 1); response.is_ac3 = response.is_aac = 0; if (channel->getAudioChannel(i)->audioChannelType == CZapitAudioChannel::AC3) { response.is_ac3 = 1; @@ -351,12 +343,12 @@ void CRecordInstance::ProcessAPIDnames() has_unresolved_ctags= true; if ( strlen( allpids.APIDs[count].desc ) == 3 ) - strncpy( allpids.APIDs[count].desc, getISO639Description( allpids.APIDs[count].desc ),DESC_MAX_LEN ); + strncpy( allpids.APIDs[count].desc, getISO639Description( allpids.APIDs[count].desc ),DESC_MAX_LEN -1 ); if ( allpids.APIDs[count].is_ac3 && !strstr(allpids.APIDs[count].desc, " (AC3)")) - strncat(allpids.APIDs[count].desc, " (AC3)", DESC_MAX_LEN - strlen(allpids.APIDs[count].desc)); + strncat(allpids.APIDs[count].desc, " (AC3)", DESC_MAX_LEN - strlen(allpids.APIDs[count].desc) -1); else if (allpids.APIDs[count].is_aac && !strstr(allpids.APIDs[count].desc, " (AAC)")) - strncat(allpids.APIDs[count].desc, " (AAC)", DESC_MAX_LEN - strlen(allpids.APIDs[count].desc)); + strncat(allpids.APIDs[count].desc, " (AAC)", DESC_MAX_LEN - strlen(allpids.APIDs[count].desc) -1); } if(has_unresolved_ctags && (epgid != 0)) { @@ -366,11 +358,11 @@ void CRecordInstance::ProcessAPIDnames() for(unsigned int j=0; j< allpids.APIDs.size(); j++) { if(allpids.APIDs[j].component_tag == tags[i].componentTag) { if(!tags[i].component.empty()) { - strncpy(allpids.APIDs[j].desc, tags[i].component.c_str(), DESC_MAX_LEN); + strncpy(allpids.APIDs[j].desc, tags[i].component.c_str(), DESC_MAX_LEN -1); if (allpids.APIDs[j].is_ac3 && !strstr(allpids.APIDs[j].desc, " (AC3)")) - strncat(allpids.APIDs[j].desc, " (AC3)", DESC_MAX_LEN - strlen(allpids.APIDs[j].desc)); + strncat(allpids.APIDs[j].desc, " (AC3)", DESC_MAX_LEN - strlen(allpids.APIDs[j].desc)-1); else if (allpids.APIDs[j].is_aac && !strstr(allpids.APIDs[j].desc, " (AAC)")) - strncat(allpids.APIDs[j].desc, " (AAC)", DESC_MAX_LEN - strlen(allpids.APIDs[j].desc)); + strncat(allpids.APIDs[j].desc, " (AAC)", DESC_MAX_LEN - strlen(allpids.APIDs[j].desc)-1); } allpids.APIDs[j].component_tag = -1; break; @@ -547,7 +539,7 @@ void CRecordInstance::FillMovieInfo(CZapitChannel * channel, APIDList & apid_lis for(it = apid_list.begin(); it != apid_list.end(); ++it) { if(allpids.APIDs[i].pid == it->apid) { audio_pids.epgAudioPid = allpids.APIDs[i].pid; - audio_pids.epgAudioPidName = g_RemoteControl->current_PIDs.APIDs[i].desc; + audio_pids.epgAudioPidName = allpids.APIDs[i].desc; audio_pids.atype = allpids.APIDs[i].is_ac3 ? 1 : allpids.APIDs[i].is_aac ? 5 : 0; audio_pids.selected = (audio_pids.epgAudioPid == channel->getAudioPid()) ? 1 : 0; recMovieInfo->audioPids.push_back(audio_pids); @@ -558,7 +550,7 @@ void CRecordInstance::FillMovieInfo(CZapitChannel * channel, APIDList & apid_lis if(recMovieInfo->audioPids.empty() && !allpids.APIDs.empty()) { int i = 0; audio_pids.epgAudioPid = allpids.APIDs[i].pid; - audio_pids.epgAudioPidName = g_RemoteControl->current_PIDs.APIDs[i].desc; + audio_pids.epgAudioPidName = allpids.APIDs[i].desc; audio_pids.atype = allpids.APIDs[i].is_ac3 ? 1 : allpids.APIDs[i].is_aac ? 5 : 0; audio_pids.selected = 1; recMovieInfo->audioPids.push_back(audio_pids); @@ -606,16 +598,16 @@ record_error_msg_t CRecordInstance::MakeFileName(CZapitChannel * channel) if (errno == ENOENT) { res = safe_mkdir(filename); if (res == 0) - strncat(filename,"/",FILENAMEBUFFERSIZE - strlen(filename)); + strncat(filename,"/",FILENAMEBUFFERSIZE - strlen(filename) -1); else perror("[vcrcontrol] mkdir"); - } else + } else perror("[vcrcontrol] stat"); } else // directory exists - strncat(filename,"/",FILENAMEBUFFERSIZE - strlen(filename)); + strncat(filename,"/",FILENAMEBUFFERSIZE - strlen(filename)-1); } else - strncat(filename, "_",FILENAMEBUFFERSIZE - strlen(filename)); + strncat(filename, "_",FILENAMEBUFFERSIZE - strlen(filename)-1); } pos = strlen(filename); @@ -639,7 +631,7 @@ record_error_msg_t CRecordInstance::MakeFileName(CZapitChannel * channel) pos += strftime(&(filename[pos]), sizeof(filename) - pos - 1, "%Y%m%d_%H%M%S", localtime(&t)); if(autoshift) - strncat(filename, "_temp",FILENAMEBUFFERSIZE - strlen(filename)); + strncat(filename, "_temp",FILENAMEBUFFERSIZE - strlen(filename)-1); return RECORD_OK; } @@ -652,7 +644,9 @@ void CRecordInstance::GetRecordString(std::string &str) str = "Unknown channel : " + GetEpgTitle(); return; } - str = channel->getName() + ": " + GetEpgTitle(); + char stime[15]; + strftime(stime, sizeof(stime), "%H:%M:%S ", localtime(&start_time)); + str = stime + channel->getName() + ": " + GetEpgTitle(); } //------------------------------------------------------------------------- @@ -664,7 +658,7 @@ CRecordManager::CRecordManager() StreamVTxtPid = false; StreamPmtPid = false; StopSectionsd = false; - recordingstatus = 0; + //recordingstatus = 0; recmap.clear(); nextmap.clear(); autoshift = false; @@ -699,36 +693,66 @@ CRecordManager * CRecordManager::getInstance() CRecordInstance * CRecordManager::FindInstance(t_channel_id channel_id) { - recmap_iterator_t it = recmap.find(channel_id); - if(it != recmap.end()) - return it->second; + for (recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) { + if (it->second->GetChannelId() == channel_id) + return it->second; + } return NULL; } -MI_MOVIE_INFO * CRecordManager::GetMovieInfo(t_channel_id channel_id) +CRecordInstance * CRecordManager::FindInstanceID(int recid) +{ + for (recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) { + if (it->second->GetRecordingId() == recid) + return it->second; + } + return NULL; +} + +CRecordInstance * CRecordManager::FindTimeshift() +{ + for (recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) { + if (it->second->Timeshift()) + return it->second; + } + return NULL; +} + +MI_MOVIE_INFO * CRecordManager::GetMovieInfo(t_channel_id channel_id, bool timeshift) { //FIXME copy MI_MOVIE_INFO ? MI_MOVIE_INFO * mi = NULL; mutex.lock(); - CRecordInstance * inst = FindInstance(channel_id); - if(inst) + CRecordInstance * inst = NULL; + if (timeshift) + inst = FindTimeshift(); + if (inst == NULL) + inst = FindInstance(channel_id); + if (inst) mi = inst->GetMovieInfo(); mutex.unlock(); return mi; } -const std::string CRecordManager::GetFileName(t_channel_id channel_id) +const std::string CRecordManager::GetFileName(t_channel_id channel_id, bool timeshift) { std::string filename; - CRecordInstance * inst = FindInstance(channel_id); + CRecordInstance * inst = NULL; + if (timeshift) + inst = FindTimeshift(); + if (inst == NULL) + inst = FindInstance(channel_id); + if(inst) filename = inst->GetFileName(); return filename; } +/* return record mode mask, for channel_id not 0, or global */ int CRecordManager::GetRecordMode(const t_channel_id channel_id) { +#if 0 if (RecordingStatus(channel_id) || IsTimeshift(channel_id)) { if (RecordingStatus(channel_id) && !IsTimeshift(channel_id)) @@ -742,13 +766,34 @@ int CRecordManager::GetRecordMode(const t_channel_id channel_id) return RECMODE_REC_TSHIFT; else return RECMODE_OFF; - }else + } else { if (IsTimeshift(channel_id)) return RECMODE_TSHIFT; } } return RECMODE_OFF; +#endif + int recmode = RECMODE_OFF; + mutex.lock(); + if (channel_id == 0) { + /* we can have only one timeshift instance, if there are more - some is record */ + if ((!autoshift && !recmap.empty()) || recmap.size() > 1) + recmode |= RECMODE_REC; + if (autoshift) + recmode |= RECMODE_TSHIFT; + } else { + for (recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) { + if (it->second->GetChannelId() == channel_id) { + if (it->second->Timeshift()) + recmode |= RECMODE_TSHIFT; + else + recmode |= RECMODE_REC; + } + } + } + mutex.unlock(); + return recmode; } bool CRecordManager::Record(const t_channel_id channel_id, const char * dir, bool timeshift) @@ -771,7 +816,7 @@ bool CRecordManager::Record(const t_channel_id channel_id, const char * dir, boo } eventinfo.apids = TIMERD_APIDS_CONF; eventinfo.recordingDir[0] = 0; - + return Record(&eventinfo, dir, timeshift); } @@ -786,8 +831,10 @@ bool CRecordManager::Record(const CTimerd::RecordingInfo * const eventinfo, cons printf("%s channel_id %llx epg: %llx, apidmode 0x%X\n", __FUNCTION__, eventinfo->channel_id, eventinfo->epgID, eventinfo->apids); +#if 0 if(!CheckRecording(eventinfo)) return false; +#endif #if 1 // FIXME test StopSectionsd = false; @@ -797,25 +844,21 @@ bool CRecordManager::Record(const CTimerd::RecordingInfo * const eventinfo, cons RunStartScript(); mutex.lock(); - recmap_iterator_t it = recmap.find(eventinfo->channel_id); - if(it != recmap.end()) { - //inst = it->second; +#if 0 + inst = FindInstance(eventinfo->channel_id); + if(inst) { if(direct_record) { error_msg = RECORD_BUSY; } else { - //nextmap.push_back((CTimerd::RecordingInfo *)eventinfo); CTimerd::RecordingInfo * evt = new CTimerd::RecordingInfo(*eventinfo); printf("%s add %llx : %s to pending\n", __FUNCTION__, evt->channel_id, evt->epgTitle); nextmap.push_back((CTimerd::RecordingInfo *)evt); } - } else if(recmap.size() < RECORD_MAX_COUNT) { -#if 1//FIXME test - CZapitChannel * channel = CServiceManager::getInstance()->FindChannel(eventinfo->channel_id); - CFrontend * frontend = CFEManager::getInstance()->allocateFE(channel); - int mode = channel->getServiceType() != ST_DIGITAL_RADIO_SOUND_SERVICE ? - NeutrinoMessages::mode_tv : NeutrinoMessages::mode_radio; + } else #endif - if(frontend && CutBackNeutrino(eventinfo->channel_id, mode)) { + if(recmap.size() < RECORD_MAX_COUNT) { + CFrontend * frontend = NULL; + if(CutBackNeutrino(eventinfo->channel_id, frontend)) { std::string newdir; if(dir && strlen(dir)) newdir = std::string(dir); @@ -824,21 +867,20 @@ bool CRecordManager::Record(const CTimerd::RecordingInfo * const eventinfo, cons else newdir = Directory; - if (inst == NULL) - inst = new CRecordInstance(eventinfo, newdir, timeshift, StreamVTxtPid, StreamPmtPid); + inst = new CRecordInstance(eventinfo, newdir, timeshift, StreamVTxtPid, StreamPmtPid); inst->frontend = frontend; error_msg = inst->Record(); if(error_msg == RECORD_OK) { - recmap.insert(std::pair(eventinfo->channel_id, inst)); + recmap.insert(recmap_pair_t(inst->GetRecordingId(), inst)); if(timeshift) autoshift = true; +#if 0 // mimic old behavior for start/stop menu option chooser, still actual ? t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); - if(eventinfo->channel_id == live_channel_id) { + if(eventinfo->channel_id == live_channel_id) recordingstatus = 1; - rec_channel_id = live_channel_id;//FIXME - } +#endif } else { delete inst; } @@ -867,7 +909,7 @@ bool CRecordManager::Record(const CTimerd::RecordingInfo * const eventinfo, cons LOCALE_STREAMING_WRITE_ERROR )); // UTF-8 return false; } - + return true; } @@ -879,10 +921,8 @@ bool CRecordManager::StartAutoRecord() return Record(live_channel_id, TimeshiftDirectory.c_str(), true); } -bool CRecordManager::StopAutoRecord() +bool CRecordManager::StopAutoRecord(bool lock) { - bool found = false; - printf("%s: autoshift %d\n", __FUNCTION__, autoshift); g_RCInput->killTimer (shift_timer); @@ -890,29 +930,30 @@ bool CRecordManager::StopAutoRecord() if(!autoshift) return false; - mutex.lock(); - t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); - CRecordInstance * inst = FindInstance(live_channel_id); - if(inst && inst->Timeshift()) - found = true; - mutex.unlock(); + if (lock) + mutex.lock(); - if(found) { - Stop(live_channel_id); - autoshift = false; - } + CRecordInstance * inst = FindTimeshift(); + if (inst) + StopInstance(inst); - return found; + if (lock) + mutex.unlock(); + + return (inst != NULL); } +#if 0 bool CRecordManager::CheckRecording(const CTimerd::RecordingInfo * const eventinfo) { t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); - if((eventinfo->channel_id == live_channel_id) || !SAME_TRANSPONDER(eventinfo->channel_id, live_channel_id)) + /* FIXME check if frontend used for timeshift the same and will zap ?? */ + if(/*(eventinfo->channel_id == live_channel_id) ||*/ !SAME_TRANSPONDER(eventinfo->channel_id, live_channel_id)) StopAutoRecord(); return true; } +#endif void CRecordManager::StartNextRecording() { @@ -920,8 +961,9 @@ void CRecordManager::StartNextRecording() printf("%s: pending count %d\n", __FUNCTION__, nextmap.size()); for(nextmap_iterator_t it = nextmap.begin(); it != nextmap.end(); it++) { - bool tested = true; eventinfo = *it; +#if 0 + bool tested = true; if( !recmap.empty() ) { CRecordInstance * inst = FindInstance(eventinfo->channel_id); /* same channel recording and not auto - skip */ @@ -933,21 +975,28 @@ void CRecordManager::StartNextRecording() else { /* there are some recordings, test any (first) for now */ recmap_iterator_t fit = recmap.begin(); - t_channel_id channel_id = fit->first; + t_channel_id channel_id = fit->second->GetChannelId(); tested = (SAME_TRANSPONDER(channel_id, eventinfo->channel_id)); } } - if(tested) { + if(tested) +#endif + CZapitChannel * channel = CServiceManager::getInstance()->FindChannel(eventinfo->channel_id); + if (channel && CFEManager::getInstance()->canTune(channel)) + { //MountDirectory(eventinfo->recordingDir);//FIXME in old neutrino startNextRecording commented bool ret = Record(eventinfo); if(ret) { - it = nextmap.erase(it); delete[] (unsigned char *) eventinfo; + it = nextmap.erase(it++); + if (it == nextmap.end()) + break; } } } } +/* return true, if there are any recording running for this channel id, or global if id is 0 */ bool CRecordManager::RecordingStatus(const t_channel_id channel_id) { bool ret = false; @@ -972,17 +1021,18 @@ bool CRecordManager::TimeshiftOnly() return (autoshift && (count == 1)); } +/* FIXME no check for multi-tuner */ bool CRecordManager::SameTransponder(const t_channel_id channel_id) { bool same = true; mutex.lock(); int count = recmap.size(); if(count) { - if(autoshift && count == 1) + if(autoshift && count == 1) same = true; else { recmap_iterator_t fit = recmap.begin(); - t_channel_id id = fit->first; + t_channel_id id = fit->second->GetChannelId(); same = (SAME_TRANSPONDER(channel_id, id)); } } @@ -990,52 +1040,55 @@ bool CRecordManager::SameTransponder(const t_channel_id channel_id) return same; } +void CRecordManager::StopInstance(CRecordInstance * inst, bool remove_event) +{ + /* first erase - then stop, because Stop() reset recording_id to 0 */ + recmap.erase(inst->GetRecordingId()); + inst->Stop(remove_event); + + if(inst->Timeshift()) + autoshift = false; + +#if 0 + t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); + if(inst->GetChannelId() == live_channel_id) + recordingstatus = 0; +#endif + delete inst; +} bool CRecordManager::Stop(const t_channel_id channel_id) { printf("%s: %llx\n", __FUNCTION__, channel_id); mutex.lock(); + + /* FIXME stop all ? show list ? */ CRecordInstance * inst = FindInstance(channel_id); - if(inst != NULL) { - inst->Stop(); - recmap.erase(channel_id); - if(inst->Timeshift()) - autoshift = false; - delete inst; - t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); - if(channel_id == live_channel_id) { - recordingstatus = 0; - rec_channel_id = 0;//FIXME - } - } else + if(inst != NULL) + StopInstance(inst); + else printf("%s: channel %llx not recording\n", __FUNCTION__, channel_id); + mutex.unlock(); StopPostProcess(); - + return (inst != NULL); } bool CRecordManager::Stop(const CTimerd::RecordingStopInfo * recinfo) { bool ret = false; - + printf("%s: eventID %d channel_id %llx\n", __FUNCTION__, recinfo->eventID, recinfo->channel_id); mutex.lock(); - CRecordInstance * inst = FindInstance(recinfo->channel_id); + CRecordInstance * inst = FindInstanceID(recinfo->eventID); if(inst != NULL && recinfo->eventID == inst->GetRecordingId()) { - inst->Stop(false); - recmap.erase(recinfo->channel_id); - if(inst->Timeshift()) - autoshift = false; - delete inst; + StopInstance(inst, false); ret = true; - t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); - if(recinfo->channel_id == live_channel_id) - recordingstatus = 0; } else { for(nextmap_iterator_t it = nextmap.begin(); it != nextmap.end(); it++) { if((*it)->eventID == recinfo->eventID) { @@ -1054,7 +1107,7 @@ bool CRecordManager::Stop(const CTimerd::RecordingStopInfo * recinfo) mutex.unlock(); StopPostProcess(); - + return ret; } @@ -1099,6 +1152,7 @@ int CRecordManager::handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data return messages_return::unhandled; } +#if 0 bool CRecordManager::IsTimeshift(t_channel_id channel_id) { bool ret = false; @@ -1111,12 +1165,11 @@ bool CRecordManager::IsTimeshift(t_channel_id channel_id) ret = true; else ret = false; - }else + } else { for(recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) { - inst = it->second; - if(inst && inst->tshift_mode) + if(it->second->tshift_mode) { mutex.unlock(); return true; @@ -1129,44 +1182,56 @@ bool CRecordManager::IsTimeshift(t_channel_id channel_id) void CRecordManager::SetTimeshiftMode(CRecordInstance * inst, int mode) { - CRecordInstance * tmp_inst; mutex.lock(); + /* reset all instances mode ? */ for(recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) - { - tmp_inst = it->second; - if (tmp_inst) - tmp_inst->tshift_mode = TSHIFT_MODE_OFF; - } + it->second->tshift_mode = TSHIFT_MODE_OFF; + mutex.unlock(); if (inst) inst->tshift_mode = mode; } +#endif void CRecordManager::StartTimeshift() { if(g_RemoteControl->is_video_started) { - std::string tmode; + std::string tmode = "ptimeshift"; // already recording, pause bool res = true; t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); +#if 0 if(RecordingStatus(live_channel_id)) { tmode = "ptimeshift"; // already recording, pause if(GetRecordMode(live_channel_id) == RECMODE_TSHIFT) SetTimeshiftMode(FindInstance(live_channel_id), TSHIFT_MODE_PAUSE); - }else + } else { if(g_settings.temp_timeshift) { res = StartAutoRecord(); SetTimeshiftMode(FindInstance(live_channel_id), TSHIFT_MODE_TEMPORAER); - }else + } else { res = Record(live_channel_id); SetTimeshiftMode(FindInstance(live_channel_id), TSHIFT_MODE_PERMANET); } tmode = "timeshift"; // record just started } +#endif + /* start temporary timeshift if enabled and not running, but dont start second record */ + if (g_settings.temp_timeshift) { + if (!FindTimeshift()) { + res = StartAutoRecord(); + tmode = "timeshift"; // record just started + } + } + else if (!RecordingStatus(live_channel_id)) { + res = Record(live_channel_id); + tmode = "timeshift"; // record just started + } + if(res) { CMoviePlayerGui::getInstance().exec(NULL, tmode); @@ -1186,76 +1251,24 @@ int CRecordManager::exec(CMenuTarget* parent, const std::string & actionKey ) char rec_msg[256]; char rec_msg1[256]; int records = recmap.size(); - + snprintf(rec_msg1, sizeof(rec_msg1)-1, "%s", g_Locale->getText(LOCALE_RECORDINGMENU_MULTIMENU_ASK_STOP_ALL)); snprintf(rec_msg, sizeof(rec_msg)-1, rec_msg1, records); if(ShowMsgUTF(LOCALE_SHUTDOWN_RECODING_QUERY, rec_msg, CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, false) == CMessageBox::mbrYes) { snprintf(rec_msg1, sizeof(rec_msg1)-1, "%s", g_Locale->getText(LOCALE_RECORDINGMENU_MULTIMENU_INFO_STOP_ALL)); -// focus: i think no sense for 2 loops, because this code run in the same thread as neutrino, -// so neutrino dont have a chance to handle RECORD_STOP before this function returns -#if 0 - int i = 0; - int recording_ids[RECORD_MAX_COUNT]; - t_channel_id channel_ids[RECORD_MAX_COUNT]; - t_channel_id channel_id; - recmap_iterator_t it; - mutex.lock(); - for(it = recmap.begin(); it != recmap.end(); it++) - { - recording_ids[i] = 0; - channel_id = it->first; - CRecordInstance * inst = it->second; - - snprintf(rec_msg, sizeof(rec_msg)-1, rec_msg1, records-i, records); - inst-> SetStopMessage(rec_msg); - - if(inst) - { - channel_ids[i] = channel_id; - recording_ids[i] = inst->GetRecordingId(); - printf("CRecordManager::exec(ExitAll line %d) found channel %llx recording_id %d\n", __LINE__, channel_ids[i], recording_ids[i]); - i++; - } - if (i >= RECORD_MAX_COUNT) - break; - } - mutex.unlock(); - if (i > 0 && i < RECORD_MAX_COUNT) - { - for(int i2 = 0; i2 < i; i2++) - { - mutex.lock(); - CRecordInstance * inst = FindInstance(channel_ids[i2]); - - snprintf(rec_msg, sizeof(rec_msg)-1, rec_msg1, records-i2, records); - inst-> SetStopMessage(rec_msg); - - if(inst == NULL || recording_ids[i2] != inst->GetRecordingId()) - { - printf("CRecordManager::exec(ExitAll line %d) channel %llx event id %d not found\n", __LINE__, channel_ids[i2], recording_ids[i2]); - }else - { - usleep(500000); - printf("CRecordManager::exec(ExitAll line %d) stop channel %llx recording_id %d\n", __LINE__, channel_ids[i2], recording_ids[i2]); - g_Timerd->stopTimerEvent(recording_ids[i2]); - } - mutex.unlock(); - } - } -#endif int i = 0; mutex.lock(); for(recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) { - t_channel_id channel_id = it->first; CRecordInstance * inst = it->second; - + t_channel_id channel_id = inst->GetChannelId(); + snprintf(rec_msg, sizeof(rec_msg)-1, rec_msg1, records-i, records); inst->SetStopMessage(rec_msg); - + printf("CRecordManager::exec(ExitAll line %d) found channel %llx recording_id %d\n", __LINE__, channel_id, inst->GetRecordingId()); g_Timerd->stopTimerEvent(inst->GetRecordingId()); i++; @@ -1263,34 +1276,42 @@ int CRecordManager::exec(CMenuTarget* parent, const std::string & actionKey ) mutex.unlock(); } return menu_return::RETURN_EXIT_ALL; - }else if(actionKey == "Record") + } else if(actionKey == "Record") { printf("[neutrino] direct record\n"); t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); - - if(!CRecordManager::getInstance()->RecordingStatus(live_channel_id)) - { + + bool tostart = true; + CRecordInstance * inst = FindInstance(live_channel_id); + if (inst) { + std::string title; + inst->GetRecordString(title); + tostart = (ShowMsgUTF(LOCALE_RECORDING_IS_RUNNING, title.c_str(), + CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, false) == CMessageBox::mbrYes); + } + if (tostart) { CRecordManager::getInstance()->Record(live_channel_id); - + if(!g_InfoViewer->is_visible) // show Infoviewer CNeutrinoApp::getInstance()->showInfo(); - - return menu_return::RETURN_EXIT_ALL; + + return menu_return::RETURN_EXIT_ALL; } +#if 0 else DisplayInfoMessage(g_Locale->getText(LOCALE_RECORDING_IS_RUNNING)); - }else if(actionKey == "Timeshift") +#endif + } else if(actionKey == "Timeshift") { StartTimeshift(); return menu_return::RETURN_EXIT_ALL; - }else if(actionKey == "Stop_record") + } else if(actionKey == "Stop_record") { if(!CRecordManager::getInstance()->RecordingStatus()) { ShowHintUTF(LOCALE_MAINMENU_RECORDING_STOP, g_Locale->getText(LOCALE_RECORDINGMENU_RECORD_IS_NOT_RUNNING), 450, 2); return menu_return::RETURN_EXIT_ALL; - } + } } - ShowMenu(); return menu_return::RETURN_REPAINT; @@ -1312,38 +1333,40 @@ bool CRecordManager::ShowMenu(void) // Record / Timeshift t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); - bool status_ts = IsTimeshift(live_channel_id); - bool status_rec = RecordingStatus(live_channel_id) && !status_ts; - + + int rec_mode = GetRecordMode(live_channel_id); + bool status_ts = rec_mode & RECMODE_TSHIFT; + //bool status_rec = rec_mode & RECMODE_REC; + //record item - iteml = new CMenuForwarder(LOCALE_RECORDINGMENU_MULTIMENU_REC_AKT, (!status_rec && !status_ts), NULL, + iteml = new CMenuForwarder(LOCALE_RECORDINGMENU_MULTIMENU_REC_AKT, true /*!status_rec*/, NULL, this, "Record", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); //if no recordings are running, set the focus to the record menu item menu.addItem(iteml, rec_count == 0 ? true: false); - + //timeshift item - iteml = new CMenuForwarder(LOCALE_RECORDINGMENU_MULTIMENU_TIMESHIFT, !status_ts, NULL, + iteml = new CMenuForwarder(LOCALE_RECORDINGMENU_MULTIMENU_TIMESHIFT, !status_ts, NULL, this, "Timeshift", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); menu.addItem(iteml, false); - - if(rec_count > 0) + + if(rec_count > 0) { menu.addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_MAINMENU_RECORDING_STOP)); mutex.lock(); - + int i = 0 , shortcut = 1; for(recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) { - t_channel_id channel_id = it->first; CRecordInstance * inst = it->second; - channel_ids[i] = channel_id; + channel_ids[i] = inst->GetChannelId(); recording_ids[i] = inst->GetRecordingId(); - + std::string title; inst->GetRecordString(title); - + const char* mode_icon = NULL; - if (inst->tshift_mode) + //if (inst->tshift_mode) + if (inst->Timeshift()) mode_icon = NEUTRINO_ICON_AUTO_SHIFT; sprintf(cnt, "%d", i); @@ -1353,10 +1376,10 @@ bool CRecordManager::ShowMenu(void) if (rec_count == 1){ rc_key = CRCInput::RC_stop; btn_icon = NEUTRINO_ICON_BUTTON_STOP; - } + } item = new CMenuForwarderNonLocalized(title.c_str(), true, NULL, selector, cnt, rc_key, NULL, mode_icon); item->setItemButton(btn_icon, true); - + //if only one recording is running, set the focus to this menu item menu.addItem(item, rec_count == 1 ? true: false); i++; @@ -1366,10 +1389,10 @@ bool CRecordManager::ShowMenu(void) if(i > 1) //menu item "stopp all records" { menu.addItem(GenericMenuSeparatorLine); - iteml = new CMenuForwarder(LOCALE_RECORDINGMENU_MULTIMENU_STOP_ALL, true, NULL, + iteml = new CMenuForwarder(LOCALE_RECORDINGMENU_MULTIMENU_STOP_ALL, true, NULL, this, "StopAll", CRCInput::RC_stop); iteml->setItemButton(NEUTRINO_ICON_BUTTON_STOP, true); - + //if more than one recording is running, set the focus to menu item 'stopp all records' menu.addItem(iteml, rec_count > 1 ? true: false); } @@ -1382,26 +1405,30 @@ bool CRecordManager::ShowMenu(void) if (select >= 0 && select < RECORD_MAX_COUNT) { /* in theory, timer event can expire while we in menu ? lock and check again */ mutex.lock(); - CRecordInstance * inst = FindInstance(channel_ids[select]); + CRecordInstance * inst = FindInstanceID(recording_ids[select]); if(inst == NULL || recording_ids[select] != inst->GetRecordingId()) { printf("%s: channel %llx event id %d not found\n", __FUNCTION__, channel_ids[select], recording_ids[select]); mutex.unlock(); return false; } mutex.unlock(); - //return Stop(channel_ids[select]); - return AskToStop(channel_ids[select]); + return AskToStop(channel_ids[select], recording_ids[select]); } return false; } -bool CRecordManager::AskToStop(const t_channel_id channel_id) +bool CRecordManager::AskToStop(const t_channel_id channel_id, const int recid) { int recording_id = 0; std::string title; + CRecordInstance * inst; mutex.lock(); - CRecordInstance * inst = FindInstance(channel_id); + if (recid) + inst = FindInstanceID(recid); + else + inst = FindInstance(channel_id); + if(inst) { recording_id = inst->GetRecordingId(); inst->GetRecordString(title); @@ -1457,63 +1484,54 @@ bool CRecordManager::RunStopScript(void) * if zap ok * set record mode */ -bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, const int mode) +bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, CFrontend * &frontend) { bool ret = true; + CZapitChannel * channel = CServiceManager::getInstance()->FindChannel(channel_id); + if (!channel) + return false; + + int mode = channel->getServiceType() != ST_DIGITAL_RADIO_SOUND_SERVICE ? + NeutrinoMessages::mode_tv : NeutrinoMessages::mode_radio; + printf("%s channel_id %llx mode %d\n", __FUNCTION__, channel_id, mode); last_mode = CNeutrinoApp::getInstance()->getMode(); - - if(last_mode == NeutrinoMessages::mode_standby && recmap.empty()) + if(last_mode == NeutrinoMessages::mode_standby && recmap.empty()) { g_Zapit->setStandby(false); // this zap to live_channel_id + /* wait for zapit wakeup */ + g_Zapit->getMode(); + } t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); -#if 0 - if(live_channel_id != channel_id) { - if(SAME_TRANSPONDER(live_channel_id, channel_id)) { - printf("%s zapTo_record channel_id %llx\n", __FUNCTION__, channel_id); - ret = g_Zapit->zapTo_record(channel_id) > 0; - } else if(!recmap.empty()) { - ret = false; - } else { - if (mode != last_mode && (last_mode != NeutrinoMessages::mode_standby || mode != CNeutrinoApp::getInstance()->getLastMode())) { - CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , mode | NeutrinoMessages::norezap ); - // When we were on standby, then we need not wake up for streaming - if(last_mode == NeutrinoMessages::mode_standby) - CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , NeutrinoMessages::mode_standby); - } - ret = g_Zapit->zapTo_serviceID(channel_id) > 0; - printf("%s zapTo_serviceID channel_id %llx result %d\n", __FUNCTION__, channel_id, ret); - - if(!ret) - CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , last_mode); - else if(last_mode == NeutrinoMessages::mode_standby) - g_Zapit->stopPlayBack(); - } - if(!ret) - printf("%s: failed to change channel\n", __FUNCTION__); - } -#endif bool mode_changed = false; + CFrontend *live_fe = CZapit::getInstance()->GetLiveFrontend(); + frontend = live_fe; if(live_channel_id != channel_id) { - bool found = false; - if(SAME_TRANSPONDER(live_channel_id, channel_id)) { - found = true; - } else { - for(recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) { - if(SAME_TRANSPONDER(it->first, channel_id)) { - found = true; - break; - } - } + /* first try to get frontend for record with locked live */ + bool unlock = true; + CFEManager::getInstance()->lockFrontend(live_fe); + frontend = CFEManager::getInstance()->allocateFE(channel); + if (frontend == NULL) { + /* no frontend, try again with unlocked live */ + unlock = false; + CFEManager::getInstance()->unlockFrontend(live_fe); + frontend = CFEManager::getInstance()->allocateFE(channel); } + if (frontend == NULL) + return false; + + /* if allocateFE was successful, full zapTo_serviceID + * needed, if record frontend same as live, and its on different TP */ + bool found = (live_fe != frontend) || SAME_TRANSPONDER(live_channel_id, channel_id); if(found) { ret = g_Zapit->zapTo_record(channel_id) > 0; printf("%s found same tp, zapTo_record channel_id %llx result %d\n", __FUNCTION__, channel_id, ret); } else { printf("%s mode %d last_mode %d getLastMode %d\n", __FUNCTION__, mode, last_mode, CNeutrinoApp::getInstance()->getLastMode()); + StopAutoRecord(false); if (mode != last_mode && (last_mode != NeutrinoMessages::mode_standby || mode != CNeutrinoApp::getInstance()->getLastMode())) { CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , mode | NeutrinoMessages::norezap ); mode_changed = true; @@ -1522,6 +1540,8 @@ bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, const int mo ret = g_Zapit->zapTo_serviceID(channel_id) > 0; printf("%s zapTo_serviceID channel_id %llx result %d\n", __FUNCTION__, channel_id, ret); } + if (unlock) + CFEManager::getInstance()->unlockFrontend(live_fe); } if(ret) { if(StopSectionsd) { @@ -1552,21 +1572,25 @@ void CRecordManager::RestoreNeutrino(void) /* after this zapit send EVT_RECORDMODE_DEACTIVATED, so neutrino getting NeutrinoMessages::EVT_RECORDMODE */ g_Zapit->setRecordMode( false ); -#if 0 - /* if current mode not standby and current mode not mode saved at record start - * and mode saved not standby - switch to saved mode. - * Sounds wrong, because user can switch between radio and tv while record in progress ? */ - - if(CNeutrinoApp::getInstance()->getMode() != last_mode && - CNeutrinoApp::getInstance()->getMode() != NeutrinoMessages::mode_standby && - last_mode != NeutrinoMessages::mode_standby) - if(!autoshift) - g_RCInput->postMsg( NeutrinoMessages::CHANGEMODE , last_mode); -#endif if((CNeutrinoApp::getInstance()->getMode() != NeutrinoMessages::mode_standby) && StopSectionsd) g_Sectionsd->setPauseScanning(false); } +bool CRecordManager::IsFileRecord(std::string file) +{ + mutex.lock(); + for(recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) { + CRecordInstance * inst = it->second; + if ((((std::string)inst->GetFileName()) + ".ts") == file) { + mutex.unlock(); + return true; + } + } + mutex.unlock(); + return false; +} + +#if 0 /* should return true, if recordingstatus changed in this function ? */ bool CRecordManager::doGuiRecord() { @@ -1616,7 +1640,8 @@ bool CRecordManager::changeNotify(const neutrino_locale_t OptionName, void * /*d } return ret; } - +#endif +#if 0 /* this is saved copy of neutrino code which seems was not used for some time */ bool CRecordManager::ChooseRecDir(std::string &dir) { @@ -1640,7 +1665,7 @@ bool CRecordManager::ChooseRecDir(std::string &dir) dir = g_settings.network_nfs_local_dir[userDecision]; doRecord = MountDirectory(dir.c_str()); } - } else + } else printf("%s: no network devices available\n", __FUNCTION__); } return doRecord; @@ -1681,20 +1706,7 @@ bool CRecordManager::MountDirectory(const char *recordingDir) return ret; } - -bool CRecordManager::IsFileRecord(std::string file) -{ - mutex.lock(); - for(recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) { - CRecordInstance * inst = it->second; - if ((((std::string)inst->GetFileName()) + ".ts") == file) { - mutex.unlock(); - return true; - } - } - mutex.unlock(); - return false; -} +#endif #if 0 // not used, saved in case we needed it extern bool autoshift_delete; diff --git a/src/driver/record.h b/src/driver/record.h index a973d972c..05c226e82 100644 --- a/src/driver/record.h +++ b/src/driver/record.h @@ -4,12 +4,11 @@ Copyright (C) 2001 Steffen Hehn 'McClean' Copyright (C) 2011 CoolStream International Ltd - License: GPL + License: GPLv2 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. + the Free Software Foundation; This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -71,7 +70,7 @@ class CRecordInstance { private: typedef struct { - unsigned short apid; + uint32_t apid; unsigned int index;//FIXME not used ? bool ac3; } APIDDesc; @@ -105,7 +104,7 @@ class CRecordInstance void FillMovieInfo(CZapitChannel * channel, APIDList & apid_lis); record_error_msg_t MakeFileName(CZapitChannel * channel); bool SaveXml(); - record_error_msg_t Start(CZapitChannel * channel /*, APIDList &apid_list*/); + record_error_msg_t Start(CZapitChannel * channel); void WaitRecMsg(time_t StartTime, time_t WaitTime); public: CRecordInstance(const CTimerd::RecordingInfo * const eventinfo, std::string &dir, bool timeshift = false, bool stream_vtxt_pid = false, bool stream_pmt_pid = false); @@ -117,6 +116,7 @@ class CRecordInstance void SetRecordingId(int id) { recording_id = id; }; int GetRecordingId(void) { return recording_id; }; + t_channel_id GetChannelId(void) { return channel_id; }; std::string GetEpgTitle(void) { return epgTitle; }; MI_MOVIE_INFO * GetMovieInfo(void) { return recMovieInfo; }; void GetRecordString(std::string& str); @@ -128,13 +128,14 @@ class CRecordInstance CFrontend * frontend; }; -typedef std::map recmap_t; +typedef std::pair recmap_pair_t; +typedef std::map recmap_t; typedef recmap_t::iterator recmap_iterator_t; typedef std::list nextmap_t; typedef nextmap_t::iterator nextmap_iterator_t; -class CRecordManager : public CMenuTarget, public CChangeObserver +class CRecordManager : public CMenuTarget /*, public CChangeObserver*/ { private: static CRecordManager * manager; @@ -153,13 +154,16 @@ class CRecordManager : public CMenuTarget, public CChangeObserver OpenThreads::Mutex mutex; static OpenThreads::Mutex sm; - bool CutBackNeutrino(const t_channel_id channel_id, const int mode); + bool CutBackNeutrino(const t_channel_id channel_id, CFrontend * &frontend); void RestoreNeutrino(void); bool CheckRecording(const CTimerd::RecordingInfo * const eventinfo); void StartNextRecording(); void StopPostProcess(); + void StopInstance(CRecordInstance * inst, bool remove_event = true); CRecordInstance * FindInstance(t_channel_id); - void SetTimeshiftMode(CRecordInstance * inst=NULL, int mode=TSHIFT_MODE_OFF); + CRecordInstance * FindInstanceID(int recid); + CRecordInstance * FindTimeshift(); + //void SetTimeshiftMode(CRecordInstance * inst=NULL, int mode=TSHIFT_MODE_OFF); public: enum record_modes_t @@ -181,13 +185,13 @@ class CRecordManager : public CMenuTarget, public CChangeObserver bool Stop(const CTimerd::RecordingStopInfo * recinfo); bool Update(const t_channel_id channel_id); bool ShowMenu(void); - bool AskToStop(const t_channel_id channel_id); + bool AskToStop(const t_channel_id channel_id, const int recid = 0); int exec(CMenuTarget* parent, const std::string & actionKey); bool StartAutoRecord(); - bool StopAutoRecord(); + bool StopAutoRecord(bool lock = true); - MI_MOVIE_INFO * GetMovieInfo(const t_channel_id channel_id); - const std::string GetFileName(const t_channel_id channel_id); + MI_MOVIE_INFO * GetMovieInfo(const t_channel_id channel_id, bool timeshift = true); + const std::string GetFileName(const t_channel_id channel_id, bool timeshift = true); bool RunStartScript(void); bool RunStopScript(void); @@ -205,17 +209,19 @@ class CRecordManager : public CMenuTarget, public CChangeObserver bool Timeshift() { return (autoshift || shift_timer); }; bool SameTransponder(const t_channel_id channel_id); int handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data); - // old code - bool ChooseRecDir(std::string &dir); - bool MountDirectory(const char *recordingDir); // mimic old behavior for start/stop menu option chooser, still actual ? - int recordingstatus; - bool doGuiRecord(); - bool changeNotify(const neutrino_locale_t OptionName, void * /*data*/); int GetRecordCount() { return recmap.size(); }; - bool IsTimeshift(t_channel_id channel_id=0); void StartTimeshift(); int GetRecordMode(const t_channel_id channel_id=0); bool IsFileRecord(std::string file); + // old code +#if 0 + bool IsTimeshift(t_channel_id channel_id=0); + bool MountDirectory(const char *recordingDir); + bool ChooseRecDir(std::string &dir); + int recordingstatus; + bool doGuiRecord(); + bool changeNotify(const neutrino_locale_t OptionName, void * /*data*/); +#endif }; #endif diff --git a/src/driver/screenshot.cpp b/src/driver/screenshot.cpp index 6ae11889f..7aea07577 100644 --- a/src/driver/screenshot.cpp +++ b/src/driver/screenshot.cpp @@ -126,6 +126,8 @@ void CScreenShot::run() } /* save file in sync mode, return true if save ok, or false */ +#if 0 +//never used bool CScreenShot::StartSync() { bool ret = false; @@ -136,7 +138,7 @@ bool CScreenShot::StartSync() printf("CScreenShot::StartSync: %s finished: %d\n", filename.c_str(), ret); return ret; } - +#endif /* save file in selected format, free data received from video decoder */ bool CScreenShot::SaveFile() { diff --git a/src/driver/streamts.cpp b/src/driver/streamts.cpp index 9de6a2455..ec2633bc0 100644 --- a/src/driver/streamts.cpp +++ b/src/driver/streamts.cpp @@ -357,7 +357,8 @@ void * streamts_live_thread(void *data) close(fd); return 0; } - +#if 0 +//never used void streamts_file_thread(void *data) { int dvrfd; @@ -458,3 +459,4 @@ void streamts_file_thread(void *data) return; } +#endif \ No newline at end of file diff --git a/src/driver/vfd.cpp b/src/driver/vfd.cpp index e94d90fed..670f0a66f 100644 --- a/src/driver/vfd.cpp +++ b/src/driver/vfd.cpp @@ -68,6 +68,7 @@ CVFD::CVFD() text[0] = 0; clearClock = 0; mode = MODE_TVRADIO; + switch_name_time_cnt = 0; } CVFD::~CVFD() @@ -88,7 +89,7 @@ CVFD* CVFD::getInstance() void CVFD::count_down() { if (timeout_cnt > 0) { timeout_cnt--; - if (timeout_cnt == 0) { + if (timeout_cnt == 0 ) { if (g_settings.lcd_setting_dim_brightness > -1) { // save lcd brightness, setBrightness() changes global setting int b = g_settings.lcd_setting[SNeutrinoSettings::LCD_BRIGHTNESS]; @@ -99,6 +100,14 @@ void CVFD::count_down() { } } } + if (g_settings.lcd_info_line && switch_name_time_cnt > 0) { + switch_name_time_cnt--; + if (switch_name_time_cnt == 0) { + if (g_settings.lcd_setting_dim_brightness > -1) { + CVFD::getInstance()->showTime(true); + } + } + } } void CVFD::wake_up() { @@ -110,6 +119,9 @@ void CVFD::wake_up() { } else setPower(1); + if(g_settings.lcd_info_line){ + switch_name_time_cnt = g_settings.timing[SNeutrinoSettings::TIMING_INFOBAR] + 10; + } } void* CVFD::TimeThread(void *) @@ -288,7 +300,7 @@ void CVFD::showTime(bool force) ftime(&tm); t = localtime(&tm.time); - if(force || ((hour != t->tm_hour) || (minute != t->tm_min))) { + if(force || ( switch_name_time_cnt == 0 && ((hour != t->tm_hour) || (minute != t->tm_min))) ) { hour = t->tm_hour; minute = t->tm_min; strftime(timestr, 20, "%H:%M", t); @@ -495,7 +507,7 @@ void CVFD::setMode(const MODES m, const char * const title) showServicename(servicename); showclock = true; if(g_settings.lcd_info_line) - showTime(); /* "showclock = true;" implies that "showTime();" does a "displayUpdate();" */ + switch_name_time_cnt = g_settings.timing[SNeutrinoSettings::TIMING_INFOBAR] + 10; break; case MODE_AUDIO: { diff --git a/src/driver/vfd.h b/src/driver/vfd.h index 4bbe70e60..1519021d3 100644 --- a/src/driver/vfd.h +++ b/src/driver/vfd.h @@ -86,6 +86,7 @@ class CVFD int last_toggle_state_power; bool clearClock; unsigned int timeout_cnt; + unsigned int switch_name_time_cnt; int fd; int brightness; char text[256]; diff --git a/src/driver/volume.cpp b/src/driver/volume.cpp index 07f26ce78..a5534d80d 100644 --- a/src/driver/volume.cpp +++ b/src/driver/volume.cpp @@ -57,12 +57,11 @@ CVolume::CVolume() v_RemoteControl = new CRemoteControl; #endif VolumeFont = SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO; - paintDigits = true; // For future On/Off digits paintShadow = false; // For future On/Off switch shadow MuteIconFrame = false; // For future On/Off switch IconFrame ShadowOffset = 4; mute_ay = 0; - m_mode = CNeutrinoApp::getInstance()->getMode(); + m_mode = CNeutrinoApp::getInstance()->getMode(); Init(); } @@ -75,6 +74,7 @@ CVolume::~CVolume() void CVolume::Init() { + paintDigits = g_settings.volume_digits; mute_ay_old = mute_ay; int faktor_h = 18; // scale * 10 int clock_height= 0; @@ -239,9 +239,9 @@ void CVolume::setVolume(const neutrino_msg_t key, const bool bDoPaint, bool nowa // volumebar shadow if (paintShadow) - frameBuffer->paintBoxRel(x+ShadowOffset , y+ShadowOffset , (paintDigits) ? vbar_w - vbar_h : vbar_w, vbar_h, colShadow, ROUNDED, CORNER_TOP_LEFT | CORNER_BOTTOM_LEFT); + frameBuffer->paintBoxRel(x+ShadowOffset , y+ShadowOffset , (paintDigits) ? vbar_w - vbar_h : vbar_w + 1, vbar_h, colShadow, ROUNDED, (paintDigits) ? CORNER_TOP_LEFT | CORNER_BOTTOM_LEFT : CORNER_ALL); // volumebar - frameBuffer->paintBoxRel(x , y , (paintDigits) ? vbar_w - vbar_h : vbar_w, vbar_h, colBar, ROUNDED, CORNER_TOP_LEFT | CORNER_BOTTOM_LEFT); + frameBuffer->paintBoxRel(x , y , (paintDigits) ? vbar_w - vbar_h : vbar_w + 1, vbar_h, colBar, ROUNDED, (paintDigits) ? CORNER_TOP_LEFT | CORNER_BOTTOM_LEFT : CORNER_ALL); // frame for progress frameBuffer->paintBoxRel(progress_x-pB, progress_y-pB, progress_w+pB*1, progress_h+pB*2, colFrame); // volume icon diff --git a/src/eitd/Makefile.am b/src/eitd/Makefile.am index e01b04bcd..c151cd6b2 100644 --- a/src/eitd/Makefile.am +++ b/src/eitd/Makefile.am @@ -20,5 +20,13 @@ endif AM_CPPFLAGS = -fno-rtti -fno-exceptions noinst_LIBRARIES = libsectionsd.a -libsectionsd_a_SOURCES = sectionsd.cpp debug.cpp dmx.cpp xmlutil.cpp \ - SIsections.cpp SIevents.cpp SIutils.cpp SIlanguage.cpp edvbstring.cpp +libsectionsd_a_SOURCES = \ + debug.cpp \ + dmx.cpp \ + edvbstring.cpp \ + sectionsd.cpp \ + SIevents.cpp \ + SIlanguage.cpp \ + SIsections.cpp \ + SIutils.cpp \ + xmlutil.cpp diff --git a/src/eitd/SIevents.cpp b/src/eitd/SIevents.cpp index 3e89ed875..78e60f5b6 100644 --- a/src/eitd/SIevents.cpp +++ b/src/eitd/SIevents.cpp @@ -561,7 +561,8 @@ void SIevent::dump(void) const for_each(ratings.begin(), ratings.end(), printSIparentalRating()); for_each(linkage_descs.begin(), linkage_descs.end(), printSIlinkage()); } - +#if 0 +//never used void SIevent::dumpSmall(void) const { for (std::map::const_iterator it = langName.begin() ; @@ -578,3 +579,4 @@ void SIevent::dumpSmall(void) const for_each(ratings.begin(), ratings.end(), printSIparentalRating()); for_each(linkage_descs.begin(), linkage_descs.end(), printSIlinkage()); } +#endif diff --git a/src/eitd/eitd.h b/src/eitd/eitd.h index 364d2f6c4..31858afe2 100644 --- a/src/eitd/eitd.h +++ b/src/eitd/eitd.h @@ -251,6 +251,7 @@ class CCNThread : public CEventsThread void cleanup(); /* CN-specific */ + OpenThreads::Mutex update_mutex; bool updating; cDemux * eitDmx; diff --git a/src/eitd/sectionsd.cpp b/src/eitd/sectionsd.cpp index 86ff43581..493e74b51 100644 --- a/src/eitd/sectionsd.cpp +++ b/src/eitd/sectionsd.cpp @@ -150,12 +150,12 @@ inline void readLockServices(void) { pthread_rwlock_rdlock(&servicesLock); } - +#ifdef ENABLE_SDT inline void writeLockServices(void) { pthread_rwlock_wrlock(&servicesLock); } - +#endif inline void unlockServices(void) { pthread_rwlock_unlock(&servicesLock); @@ -1164,7 +1164,7 @@ static void commandReadSIfromXML(int connfd, char *data, const unsigned dataLeng static void commandWriteSI2XML(int connfd, char *data, const unsigned dataLength) { sendEmptyResponse(connfd, NULL, 0); - if ((!reader_ready) || (dataLength > 100)){ + if (mySIeventsOrderUniqueKey.empty() || (!reader_ready) || (dataLength > 100)){ eventServer->sendEvent(CSectionsdClient::EVT_WRITE_SI_FINISHED, CEventServer::INITID_SECTIONSD); return; } @@ -1672,8 +1672,6 @@ void CCNThread::beforeWait() if (updating || eit_version == 0xff) return; - updating = true; - unsigned char filter[DMX_FILTER_SIZE]; unsigned char mask[DMX_FILTER_SIZE]; unsigned char mode[DMX_FILTER_SIZE]; @@ -1693,17 +1691,22 @@ void CCNThread::beforeWait() mask[3] = (0x1F << 1) | 0x01; mode[3] = 0x1F << 1; + update_mutex.lock(); eitDmx->Open(DMX_PSI_CHANNEL); eitDmx->sectionFilter(0x12, filter, mask, 4, 0 /*timeout*/, mode); + updating = true; + update_mutex.unlock(); } void CCNThread::afterWait() { xprintf("%s: stop eit update filter (%s)\n", name.c_str(), updating ? "active" : "not active"); + update_mutex.lock(); if (updating) { updating = false; eitDmx->Close(); } + update_mutex.unlock(); } void CCNThread::beforeSleep() @@ -1743,11 +1746,16 @@ void CCNThread::processSection() /* CN specific functions */ bool CCNThread::checkUpdate() { - if (!updating) - return false; - unsigned char buf[MAX_SECTION_LENGTH]; + + update_mutex.lock(); + if (!updating) { + update_mutex.unlock(); + return false; + } + int ret = eitDmx->Read(buf, MAX_SECTION_LENGTH, 10); + update_mutex.unlock(); if (ret > 0) { LongSection section(buf); diff --git a/src/gui/Makefile.am b/src/gui/Makefile.am index 4aa167cd2..629a488f2 100644 --- a/src/gui/Makefile.am +++ b/src/gui/Makefile.am @@ -63,6 +63,7 @@ libneutrino_gui_a_SOURCES = \ moviebrowser.cpp \ movieinfo.cpp \ movieplayer.cpp \ + network_service.cpp \ network_setup.cpp \ nfs.cpp \ osd_setup.cpp \ @@ -94,8 +95,7 @@ libneutrino_gui_a_SOURCES = \ user_menue_setup.cpp \ vfd_setup.cpp \ videosettings.cpp \ - zapit_setup.cpp \ - network_service.cpp + zapit_setup.cpp libneutrino_gui2_a_SOURCES = \ cam_menu.cpp \ diff --git a/src/gui/audio_setup.cpp b/src/gui/audio_setup.cpp index e737ad34b..4cf8ee6a5 100644 --- a/src/gui/audio_setup.cpp +++ b/src/gui/audio_setup.cpp @@ -131,7 +131,7 @@ int CAudioSetup::showAudioSetup() //dd subchannel auto on/off CMenuOptionChooser * as_oj_ddsubchn = new CMenuOptionChooser(LOCALE_AUDIOMENU_DOLBYDIGITAL, &g_settings.audio_DolbyDigital, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, audioSetupNotifier); - as_oj_ddsubchn->setHint("", LOCALE_MENU_HINT_AUDIO_DOLBYDIGITAL); + as_oj_ddsubchn->setHint("", LOCALE_MENU_HINT_AUDIO_DD); //dd via hdmi CMenuOptionChooser * as_oj_dd_hdmi = new CMenuOptionChooser(LOCALE_AUDIOMENU_HDMI_DD, &g_settings.hdmi_dd, AUDIOMENU_HDMI_DD_OPTIONS, AUDIOMENU_HDMI_DD_OPTION_COUNT, true, audioSetupNotifier); diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index 1fb5be216..60359eb71 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -187,6 +187,8 @@ CAudioPlayerGui::CAudioPlayerGui(bool inetmode) m_frameBuffer = CFrameBuffer::getInstance(); m_visible = false; m_inetmode = inetmode; + dline = NULL; + ibox = NULL; Init(); } @@ -236,6 +238,8 @@ CAudioPlayerGui::~CAudioPlayerGui() m_title2Pos.clear(); // g_Zapit->setStandby (false); g_Sectionsd->setPauseScanning (false); + delete dline; + delete ibox; } //------------------------------------------------------------------------ @@ -1869,46 +1873,34 @@ void CAudioPlayerGui::clearItemID3DetailsLine () void CAudioPlayerGui::paintItemID3DetailsLine (int pos) { int xpos = m_x - ConnectLineBox_Width; - int ypos1 = m_y + m_title_height + m_theight+ 0 + pos*m_fheight; - int ypos2 = m_y + (m_height - m_info_height); + int ypos1 = m_y + m_title_height + m_theight+ 0 + pos*m_fheight + INFO_BOX_Y_OFFSET; + int ypos2 = m_y + (m_height - m_info_height) + INFO_BOX_Y_OFFSET; int ypos1a = ypos1 + (m_fheight / 2) - 2; int ypos2a = ypos2 + (m_info_height / 2) - 2; - fb_pixel_t col1 = COL_MENUCONTENT_PLUS_6; - fb_pixel_t col2 = COL_MENUCONTENT_PLUS_1; - int c_rad_small = RADIUS_SMALL; + // clear details line + if (dline != NULL) + dline->hide(); - // Clear - m_frameBuffer->paintBackgroundBoxRel(xpos - 1, m_y + m_title_height, ConnectLineBox_Width + 1, - m_height - m_title_height); + // clear infobox + if (ibox != NULL) + ibox->hide(); - // paint Line if detail info (and not valid list pos) + // paint Line if detail info (and not valid list pos) and info box if (!m_playlist.empty() && (pos >= 0)) { - int fh = m_info_height > RADIUS_MID*2 ? m_info_height - RADIUS_MID*2 : m_info_height; - // 1. col thick line - m_frameBuffer->paintBoxRel(xpos + ConnectLineBox_Width - 4, ypos1, 4, m_fheight, col2, c_rad_small, CORNER_LEFT); - m_frameBuffer->paintBoxRel(xpos + ConnectLineBox_Width - 3, ypos1, 8, m_fheight, col1, c_rad_small, CORNER_LEFT); // item marker + //details line + if (dline == NULL) + dline = new CComponentsDetailLine(xpos, ypos1a, ypos2a, m_fheight/2+1, m_fheight); + dline->setYPos(ypos1a); + dline->paint(); - m_frameBuffer->paintBoxRel(xpos + ConnectLineBox_Width - 4, ypos2+RADIUS_MID, 4, fh /*m_info_height*/, col1); - - m_frameBuffer->paintBoxRel(xpos + ConnectLineBox_Width - 16, ypos1a, 4, ypos2a - ypos1a, col1); - - m_frameBuffer->paintBoxRel(xpos + ConnectLineBox_Width - 16, ypos1a, 12, 4, col1); - m_frameBuffer->paintBoxRel(xpos + ConnectLineBox_Width - 16, ypos2a, 12, 4, col1); - - // 2. col small line - m_frameBuffer->paintBoxRel(xpos + ConnectLineBox_Width - 4, ypos2+RADIUS_MID, 1, fh /*m_info_height*/, col2); - - m_frameBuffer->paintBoxRel(xpos + ConnectLineBox_Width - 16, ypos1a, 1, ypos2a - ypos1a + 4, col2); - - m_frameBuffer->paintBoxRel(xpos + ConnectLineBox_Width - 16, ypos1a, 12, 1, col2); - m_frameBuffer->paintBoxRel(xpos + ConnectLineBox_Width - 12, ypos2a, 8, 1, col2); - - // -- small Frame around infobox - m_frameBuffer->paintBoxFrame(m_x, ypos2, m_width, m_info_height, 2, col1, RADIUS_MID); // paint id3 infobox - m_frameBuffer->paintBoxRel(m_x + 2, ypos2 + 2 , m_width - 4, m_info_height - 4, COL_MENUCONTENTDARK_PLUS_0, RADIUS_MID); + if (ibox == NULL) + ibox = new CComponentsInfoBox(m_x, ypos2, m_width, m_info_height, false); + ibox->setYPos(ypos2); + ibox->paint(false, true); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + 10, ypos2 + 2 + 1*m_fheight, m_width- 80, m_playlist[m_selected].MetaData.title, COL_MENUCONTENTDARK, 0, true); // UTF-8 std::string tmp; @@ -1937,7 +1929,10 @@ void CAudioPlayerGui::paintItemID3DetailsLine (int pos) } else { - m_frameBuffer->paintBackgroundBoxRel(m_x, ypos2, m_width, m_info_height); + if (dline != NULL) + dline->hide(); + if (ibox != NULL) + ibox->hide(); } } //------------------------------------------------------------------------ diff --git a/src/gui/audioplayer.h b/src/gui/audioplayer.h index 3fea78f12..07a6c6fc5 100644 --- a/src/gui/audioplayer.h +++ b/src/gui/audioplayer.h @@ -37,6 +37,7 @@ #include "driver/framebuffer.h" #include "driver/audiofile.h" #include "gui/filebrowser.h" +#include "gui/widget/components.h" #include "gui/widget/menue.h" #include @@ -140,6 +141,8 @@ class CAudioPlayerGui : public CMenuTarget bool m_screensaver; bool m_inetmode; uint32_t stimer; + CComponentsDetailLine *dline; + CComponentsInfoBox *ibox; SMSKeyInput m_SMSKeyInput; diff --git a/src/gui/audioplayer_setup.cpp b/src/gui/audioplayer_setup.cpp index b193e6237..4dea21a80 100644 --- a/src/gui/audioplayer_setup.cpp +++ b/src/gui/audioplayer_setup.cpp @@ -82,7 +82,7 @@ int CAudioPlayerSetup::exec(CMenuTarget* parent, const std::string &actionKey) } res = showAudioPlayerSetup(); - + return res; } @@ -98,26 +98,53 @@ const CMenuOptionChooser::keyval AUDIOPLAYER_DISPLAY_ORDER_OPTIONS[AUDIOPLAYER_D /*shows the audio setup menue*/ int CAudioPlayerSetup::showAudioPlayerSetup() { + CMenuOptionChooser * mc; + CMenuForwarder * mf; + CMenuWidget* audioplayerSetup = new CMenuWidget(LOCALE_MAINMENU_SETTINGS, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_AUDIOSETUP); audioplayerSetup->addIntroItems(LOCALE_AUDIOPLAYER_NAME); - audioplayerSetup->addItem(new CMenuOptionChooser(LOCALE_AUDIOPLAYER_DISPLAY_ORDER, &g_settings.audioplayer_display , AUDIOPLAYER_DISPLAY_ORDER_OPTIONS, AUDIOPLAYER_DISPLAY_ORDER_OPTION_COUNT, true )); - audioplayerSetup->addItem(new CMenuOptionChooser(LOCALE_AUDIOPLAYER_FOLLOW , &g_settings.audioplayer_follow , MESSAGEBOX_NO_YES_OPTIONS , MESSAGEBOX_NO_YES_OPTION_COUNT , true )); - audioplayerSetup->addItem(new CMenuOptionChooser(LOCALE_AUDIOPLAYER_SELECT_TITLE_BY_NAME , &g_settings.audioplayer_select_title_by_name , MESSAGEBOX_NO_YES_OPTIONS , MESSAGEBOX_NO_YES_OPTION_COUNT , true )); - audioplayerSetup->addItem(new CMenuOptionChooser(LOCALE_AUDIOPLAYER_REPEAT_ON , &g_settings.audioplayer_repeat_on , MESSAGEBOX_NO_YES_OPTIONS , MESSAGEBOX_NO_YES_OPTION_COUNT , true )); - audioplayerSetup->addItem(new CMenuOptionChooser(LOCALE_AUDIOPLAYER_SHOW_PLAYLIST, &g_settings.audioplayer_show_playlist, MESSAGEBOX_NO_YES_OPTIONS, MESSAGEBOX_NO_YES_OPTION_COUNT, true )); + // display order + mc = new CMenuOptionChooser(LOCALE_AUDIOPLAYER_DISPLAY_ORDER, &g_settings.audioplayer_display, AUDIOPLAYER_DISPLAY_ORDER_OPTIONS, AUDIOPLAYER_DISPLAY_ORDER_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_AUDIOPLAYER_ORDER); + audioplayerSetup->addItem(mc); + + mc = new CMenuOptionChooser(LOCALE_AUDIOPLAYER_FOLLOW, &g_settings.audioplayer_follow, MESSAGEBOX_NO_YES_OPTIONS, MESSAGEBOX_NO_YES_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_AUDIOPLAYER_FOLLOW); + audioplayerSetup->addItem(mc); + + mc = new CMenuOptionChooser(LOCALE_AUDIOPLAYER_SELECT_TITLE_BY_NAME, &g_settings.audioplayer_select_title_by_name, MESSAGEBOX_NO_YES_OPTIONS, MESSAGEBOX_NO_YES_OPTION_COUNT, true ); + mc->setHint("", LOCALE_MENU_HINT_AUDIOPLAYER_TITLE); + audioplayerSetup->addItem(mc); + + mc = new CMenuOptionChooser(LOCALE_AUDIOPLAYER_REPEAT_ON, &g_settings.audioplayer_repeat_on, MESSAGEBOX_NO_YES_OPTIONS, MESSAGEBOX_NO_YES_OPTION_COUNT, true ); + mc->setHint("", LOCALE_MENU_HINT_AUDIOPLAYER_REPEAT); + audioplayerSetup->addItem(mc); + + mc = new CMenuOptionChooser(LOCALE_AUDIOPLAYER_SHOW_PLAYLIST, &g_settings.audioplayer_show_playlist, MESSAGEBOX_NO_YES_OPTIONS, MESSAGEBOX_NO_YES_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_AUDIOPLAYER_PLAYLIST); + audioplayerSetup->addItem(mc); CStringInput audio_screensaver(LOCALE_AUDIOPLAYER_SCREENSAVER_TIMEOUT, g_settings.audioplayer_screensaver, 2, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789 "); - audioplayerSetup->addItem(new CMenuForwarder(LOCALE_AUDIOPLAYER_SCREENSAVER_TIMEOUT, true, g_settings.audioplayer_screensaver, &audio_screensaver)); + mf = new CMenuForwarder(LOCALE_AUDIOPLAYER_SCREENSAVER_TIMEOUT, true, g_settings.audioplayer_screensaver, &audio_screensaver); + mf->setHint("", LOCALE_MENU_HINT_AUDIOPLAYER_SCREENSAVER); + audioplayerSetup->addItem(mf); - audioplayerSetup->addItem(new CMenuOptionChooser(LOCALE_AUDIOPLAYER_HIGHPRIO , &g_settings.audioplayer_highprio , MESSAGEBOX_NO_YES_OPTIONS , MESSAGEBOX_NO_YES_OPTION_COUNT , true )); + mc = new CMenuOptionChooser(LOCALE_AUDIOPLAYER_HIGHPRIO, &g_settings.audioplayer_highprio, MESSAGEBOX_NO_YES_OPTIONS, MESSAGEBOX_NO_YES_OPTION_COUNT, true ); + mc->setHint("", LOCALE_MENU_HINT_AUDIOPLAYER_HIGHPRIO); + audioplayerSetup->addItem(mc); #if 0 if (CVFD::getInstance()->has_lcd) //FIXME audioplayerSetup->addItem(new CMenuOptionChooser(LOCALE_AUDIOPLAYER_SPECTRUM , &g_settings.spectrum , MESSAGEBOX_NO_YES_OPTIONS , MESSAGEBOX_NO_YES_OPTION_COUNT , true )); #endif - audioplayerSetup->addItem(new CMenuForwarder(LOCALE_AUDIOPLAYER_DEFDIR, true, g_settings.network_nfs_audioplayerdir, this, "audioplayerdir")); - audioplayerSetup->addItem(new CMenuOptionChooser(LOCALE_AUDIOPLAYER_ENABLE_SC_METADATA, &g_settings.audioplayer_enable_sc_metadata, MESSAGEBOX_NO_YES_OPTIONS, MESSAGEBOX_NO_YES_OPTION_COUNT, true )); + mf = new CMenuForwarder(LOCALE_AUDIOPLAYER_DEFDIR, true, g_settings.network_nfs_audioplayerdir, this, "audioplayerdir"); + mf->setHint("", LOCALE_MENU_HINT_AUDIOPLAYER_DEFDIR); + audioplayerSetup->addItem(mf); + + mc = new CMenuOptionChooser(LOCALE_AUDIOPLAYER_ENABLE_SC_METADATA, &g_settings.audioplayer_enable_sc_metadata, MESSAGEBOX_NO_YES_OPTIONS, MESSAGEBOX_NO_YES_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_AUDIOPLAYER_SC_METADATA); + audioplayerSetup->addItem(mc); int res = audioplayerSetup->exec (NULL, ""); delete audioplayerSetup; diff --git a/src/gui/bedit/bouqueteditor_bouquets.cpp b/src/gui/bedit/bouqueteditor_bouquets.cpp index 0d9d99526..6cfb749f6 100644 --- a/src/gui/bedit/bouqueteditor_bouquets.cpp +++ b/src/gui/bedit/bouqueteditor_bouquets.cpp @@ -66,6 +66,11 @@ CBEBouquetWidget::CBEBouquetWidget() liststart = 0; state = beDefault; blueFunction = beRename; + Bouquets = NULL; + iheight = 0; + ButtonHeight = 0; + fheight = 0; + theight = 0; } void CBEBouquetWidget::paintItem(int pos) @@ -528,7 +533,7 @@ std::string CBEBouquetWidget::inputName(const char * const defaultName, const ne { char Name[30]; - strncpy(Name, defaultName, 30); + strncpy(Name, defaultName, sizeof(Name)-1); CStringInputSMS * nameInput = new CStringInputSMS(caption, Name, 29, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "abcdefghijklmnopqrstuvwxyz0123456789-.,:|!?/ "); nameInput->exec(this, ""); diff --git a/src/gui/bedit/bouqueteditor_bouquets.h b/src/gui/bedit/bouqueteditor_bouquets.h index f916eae2b..8fff41f56 100644 --- a/src/gui/bedit/bouqueteditor_bouquets.h +++ b/src/gui/bedit/bouqueteditor_bouquets.h @@ -51,7 +51,7 @@ public: virtual void onBouquetsChanged() {}; }; -class CBEBouquetWidget : public CMenuWidget +class CBEBouquetWidget : public CMenuTarget { private: diff --git a/src/gui/bedit/bouqueteditor_channels.cpp b/src/gui/bedit/bouqueteditor_channels.cpp index 83936c788..00fa4d5e0 100644 --- a/src/gui/bedit/bouqueteditor_channels.cpp +++ b/src/gui/bedit/bouqueteditor_channels.cpp @@ -87,6 +87,15 @@ CBEChannelWidget::CBEChannelWidget(const std::string & Caption, unsigned int Bou caption = Caption; bouquet = Bouquet; mode = CZapitClient::MODE_TV; + dline = NULL; + ibox = NULL; + Channels = NULL; +} + +CBEChannelWidget::~CBEChannelWidget() +{ + delete dline; + delete ibox; } void CBEChannelWidget::paintItem(int pos) @@ -100,9 +109,6 @@ void CBEChannelWidget::paintItem(int pos) color = COL_MENUCONTENTSELECTED; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; - // clear details - frameBuffer->paintBoxRel(x+2, y + height + 2, width-4, info_height - 4, COL_MENUCONTENTDARK_PLUS_0, RADIUS_LARGE); - if(current < Channels->size()) { paintItem2DetailsLine (pos, current); paintDetails(current); @@ -193,8 +199,8 @@ void CBEChannelWidget::paintDetails(int index) else desc = desc + " (" + satname + ")"; - g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ fheight, width - 30, satname.c_str(), COL_MENUCONTENTDARK, 0, true); - g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ 2*fheight, width - 30, desc.c_str(), COL_MENUCONTENTDARK, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ fheight+INFO_BOX_Y_OFFSET, width - 30, satname.c_str(), COL_MENUCONTENTDARK, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ 2*fheight+INFO_BOX_Y_OFFSET, width - 30, desc.c_str(), COL_MENUCONTENTDARK, 0, true); } void CBEChannelWidget::paintItem2DetailsLine (int pos, int /*ch_index*/) @@ -203,41 +209,33 @@ void CBEChannelWidget::paintItem2DetailsLine (int pos, int /*ch_index*/) int xpos = x - ConnectLineBox_Width; int ypos1 = y + theight+0 + pos*fheight; - int ypos2 = y + height; + int ypos2 = y + height + INFO_BOX_Y_OFFSET; int ypos1a = ypos1 + (fheight/2)-2; int ypos2a = ypos2 + (info_height/2)-2; - fb_pixel_t col1 = COL_MENUCONTENT_PLUS_6; - fb_pixel_t col2 = COL_MENUCONTENT_PLUS_1; - // Clear - frameBuffer->paintBackgroundBoxRel(xpos,y, ConnectLineBox_Width, height+info_height); + clearItem2DetailsLine(); // paint Line if detail info (and not valid list pos) if (pos >= 0) { - int fh = fheight > 10 ? fheight - 10: 5; - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos1+5, 4, fh, col1); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos1+5, 1, fh, col2); + if (dline == NULL) + dline = new CComponentsDetailLine(xpos, ypos1a, ypos2a, fheight/2+1, info_height-RADIUS_LARGE*2); + dline->setYPos(ypos1a); + dline->paint(); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos2+7, 4,info_height-14, col1); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos2+7, 1,info_height-14, col2); - - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 4,ypos2a-ypos1a, col1); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 1,ypos2a-ypos1a+4, col2); - - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 12,4, col1); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 12,1, col2); - - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos2a, 12,4, col1); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-12, ypos2a, 8,1, col2); - - frameBuffer->paintBoxFrame(x, ypos2, width, info_height, 2, col1, RADIUS_LARGE); + //infobox + if (ibox == NULL) + ibox = new CComponentsInfoBox(x, ypos2, width, info_height, false); + ibox->paint(false); } } -void CBEChannelWidget::clearItem2DetailsLine () +void CBEChannelWidget::clearItem2DetailsLine() { - paintItem2DetailsLine (-1, 0); + if (dline != NULL) + dline->hide(); + if (ibox != NULL) + ibox->hide(); } void CBEChannelWidget::hide() diff --git a/src/gui/bedit/bouqueteditor_channels.h b/src/gui/bedit/bouqueteditor_channels.h index 5b59278c2..bcc653e74 100644 --- a/src/gui/bedit/bouqueteditor_channels.h +++ b/src/gui/bedit/bouqueteditor_channels.h @@ -35,20 +35,21 @@ #include #include - +#include #include #include #include #include -class CBEChannelWidget : public CMenuWidget +class CBEChannelWidget : public CMenuTarget { private: - CFrameBuffer *frameBuffer; - + CComponentsDetailLine *dline; + CComponentsInfoBox *ibox; + enum state_ { beDefault, @@ -100,6 +101,7 @@ class CBEChannelWidget : public CMenuWidget public: CBEChannelWidget( const std::string & Caption, unsigned int Bouquet); + ~CBEChannelWidget(); //CZapitClient::BouquetChannelList Channels; ZapitChannelList * Channels; diff --git a/src/gui/bedit/bouqueteditor_chanselect.cpp b/src/gui/bedit/bouqueteditor_chanselect.cpp index ad0604abd..e2f787e44 100644 --- a/src/gui/bedit/bouqueteditor_chanselect.cpp +++ b/src/gui/bedit/bouqueteditor_chanselect.cpp @@ -72,6 +72,21 @@ CBEChannelSelectWidget::CBEChannelSelectWidget(const std::string & Caption, unsi ButtonHeight = std::max(footerHeight, icol_h+4); liststart = 0; + bouquetChannels = NULL; + dline = NULL; + ibox = NULL; +} + +CBEChannelSelectWidget::~CBEChannelSelectWidget() +{ + // clear details line + if (dline != NULL) + dline->hide(); + delete dline; + // clear infobox + if (ibox != NULL) + ibox->hide(); + delete ibox; } uint CBEChannelSelectWidget::getItemCount() @@ -105,7 +120,6 @@ void CBEChannelSelectWidget::paintItem(uint32_t itemNr, int paintNr, bool pselec color = COL_MENUCONTENTSELECTED; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; - frameBuffer->paintBoxRel(x+2, y + height + 2, width-4, info_height - 4, COL_MENUCONTENTDARK_PLUS_0, RADIUS_LARGE); if(itemNr < getItemCount()) { paintItem2DetailsLine (paintNr, itemNr); paintDetails(itemNr); @@ -208,8 +222,8 @@ void CBEChannelSelectWidget::paintDetails(int index) else desc = desc + " (" + satname + ")"; - g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ fheight, width - 30, satname.c_str(), COL_MENUCONTENTDARK, 0, true); - g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ 2*fheight, width - 30, desc.c_str(), COL_MENUCONTENTDARK, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ fheight+INFO_BOX_Y_OFFSET, width - 30, satname.c_str(), COL_MENUCONTENTDARK, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ 2*fheight+INFO_BOX_Y_OFFSET, width - 30, desc.c_str(), COL_MENUCONTENTDARK, 0, true); } void CBEChannelSelectWidget::paintItem2DetailsLine (int pos, int /*ch_index*/) @@ -218,34 +232,30 @@ void CBEChannelSelectWidget::paintItem2DetailsLine (int pos, int /*ch_index*/) int xpos = x - ConnectLineBox_Width; int ypos1 = y + theight+0 + pos*fheight; - int ypos2 = y + height; + int ypos2 = y + height + INFO_BOX_Y_OFFSET; int ypos1a = ypos1 + (fheight/2)-2; int ypos2a = ypos2 + (info_height/2)-2; - fb_pixel_t col1 = COL_MENUCONTENT_PLUS_6; - fb_pixel_t col2 = COL_MENUCONTENT_PLUS_1; - // Clear - frameBuffer->paintBackgroundBoxRel(xpos,y, ConnectLineBox_Width, height+info_height); + // clear details line + if (dline != NULL) + dline->hide(); + + // clear infobox + if (ibox != NULL) + ibox->hide(); // paint Line if detail info (and not valid list pos) if (pos >= 0) { - int fh = fheight > 10 ? fheight - 10: 5; - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos1+5, 4, fh, col1); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos1+5, 1, fh, col2); + if (dline == NULL) + dline = new CComponentsDetailLine(xpos, ypos1a, ypos2a, fheight/2+1, info_height-RADIUS_LARGE*2); + dline->setYPos(ypos1a); + dline->paint(false); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos2+7, 4,info_height-14, col1); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos2+7, 1,info_height-14, col2); - - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 4,ypos2a-ypos1a, col1); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 1,ypos2a-ypos1a+4, col2); - - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 12,4, col1); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 12,1, col2); - - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos2a, 12,4, col1); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-12, ypos2a, 8,1, col2); - - frameBuffer->paintBoxFrame(x, ypos2, width, info_height, 2, col1, RADIUS_LARGE); + //infobox + if (ibox == NULL) + ibox = new CComponentsInfoBox(x, ypos2, width, info_height, false); + ibox->paint(false); } } + diff --git a/src/gui/bedit/bouqueteditor_chanselect.h b/src/gui/bedit/bouqueteditor_chanselect.h index 89fc63fe5..963862550 100644 --- a/src/gui/bedit/bouqueteditor_chanselect.h +++ b/src/gui/bedit/bouqueteditor_chanselect.h @@ -34,7 +34,7 @@ #include #include - +#include #include #include @@ -48,6 +48,8 @@ class CBEChannelSelectWidget : public CListBox unsigned int bouquet; CZapitClient::channelsMode mode; bool isChannelInBouquet( int index); + CComponentsDetailLine *dline; + CComponentsInfoBox *ibox; uint getItemCount(); void paintItem(uint32_t itemNr, int paintNr, bool selected); @@ -64,6 +66,7 @@ class CBEChannelSelectWidget : public CListBox ZapitChannelList * bouquetChannels; CBEChannelSelectWidget(const std::string & Caption, unsigned int Bouquet, CZapitClient::channelsMode Mode); + ~CBEChannelSelectWidget(); int exec(CMenuTarget* parent, const std::string & actionKey); bool hasChanged(); diff --git a/src/gui/bookmarkmanager.cpp b/src/gui/bookmarkmanager.cpp index 056799fbd..d7f81a167 100644 --- a/src/gui/bookmarkmanager.cpp +++ b/src/gui/bookmarkmanager.cpp @@ -90,7 +90,8 @@ int CBookmarkManager::createBookmark (const std::string & url, const std::string } //------------------------------------------------------------------------ - +#if 0 +//never used void CBookmarkManager::removeBookmark (unsigned int index) { std::vector::iterator p = bookmarks.begin()+index; bookmarks.erase(p); @@ -115,7 +116,7 @@ void CBookmarkManager::renameBookmark (unsigned int index) { bookmarksmodified=true; } } - +#endif #define BOOKMARKSTRINGLENGTH (10 + 1) #define BOOKMARKSTRINGMODIFICATIONPOINT 8 const char * const BOOKMARKSTRING = "bookmark0."; @@ -195,7 +196,8 @@ CBookmarkManager::~CBookmarkManager () { } //------------------------------------------------------------------------ - +#if 0 +//never used int CBookmarkManager::getBookmarkCount(void) const { return bookmarks.size(); } @@ -205,7 +207,7 @@ int CBookmarkManager::getBookmarkCount(void) const { int CBookmarkManager::getMaxBookmarkCount(void) const { return MAXBOOKMARKS; } - +#endif //------------------------------------------------------------------------ void CBookmarkManager::flush() { @@ -215,7 +217,8 @@ void CBookmarkManager::flush() { } //------------------------------------------------------------------------ - +#if 0 +//never used const CBookmark * CBookmarkManager::getBookmark(CMenuTarget* parent) { if (parent) @@ -244,7 +247,7 @@ const CBookmark * CBookmarkManager::getBookmark(CMenuTarget* parent) listmaxshow=bookmarks.size(); height = theight+0+listmaxshow*fheight*2; // recalc height } - if (!(bookmarks.empty() && selected==bookmarks.size())) + if ((!bookmarks.empty() && selected==bookmarks.size())) { selected=bookmarks.size()-1; liststart = (selected/listmaxshow)*listmaxshow; @@ -360,7 +363,7 @@ const CBookmark * CBookmarkManager::getBookmark(CMenuTarget* parent) else return NULL; } - +#endif //------------------------------------------------------------------------ void CBookmarkManager::paintItem(int pos) { diff --git a/src/gui/bouquetlist.cpp b/src/gui/bouquetlist.cpp index 0a0f3134d..c433ffad4 100644 --- a/src/gui/bouquetlist.cpp +++ b/src/gui/bouquetlist.cpp @@ -363,21 +363,25 @@ int CBouquetList::show(bool bShowChannelList) loop=false; } else if(msg == CRCInput::RC_red || msg == CRCInput::RC_favorites) { - CNeutrinoApp::getInstance()->SetChannelMode(LIST_MODE_FAV); - hide(); - return -3; + if (CNeutrinoApp::getInstance()->GetChannelMode() != LIST_MODE_FAV) { + CNeutrinoApp::getInstance()->SetChannelMode(LIST_MODE_FAV); + hide(); + return -3; + } } else if(msg == CRCInput::RC_green) { - CNeutrinoApp::getInstance()->SetChannelMode(LIST_MODE_PROV); - hide(); - return -3; + if (CNeutrinoApp::getInstance()->GetChannelMode() != LIST_MODE_PROV) { + CNeutrinoApp::getInstance()->SetChannelMode(LIST_MODE_PROV); + hide(); + return -3; + } } else if(msg == CRCInput::RC_yellow || msg == CRCInput::RC_sat) { - if(bShowChannelList) { + if(bShowChannelList && CNeutrinoApp::getInstance()->GetChannelMode() != LIST_MODE_SAT) { CNeutrinoApp::getInstance()->SetChannelMode(LIST_MODE_SAT); hide(); return -3; } } else if(msg == CRCInput::RC_blue) { - if(bShowChannelList) { + if(bShowChannelList && CNeutrinoApp::getInstance()->GetChannelMode() != LIST_MODE_ALL) { CNeutrinoApp::getInstance()->SetChannelMode(LIST_MODE_ALL); hide(); return -3; diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index 2fbfd78b5..06f6226e1 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -25,8 +25,9 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with this program; if not, write to the + Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H @@ -54,6 +55,7 @@ #include #include #include +#include #include #include @@ -583,6 +585,7 @@ int CChannelList::show() loop=false; } else if( msg == CRCInput::RC_record) { //start direct recording from channellist +#if 0 if(!CRecordManager::getInstance()->RecordingStatus(chanlist[selected]->channel_id)) { printf("[neutrino channellist] start direct recording...\n"); @@ -599,10 +602,20 @@ int CChannelList::show() } } +#endif + if(SameTP()) { + printf("[neutrino channellist] start direct recording...\n"); + hide(); + if (!CRecordManager::getInstance()->Record(chanlist[selected]->channel_id)) { + paintHead(); + paint(); + } else + loop=false; + } } else if( msg == CRCInput::RC_stop ) { //stopp recording - if(CRecordManager::getInstance()->RecordingStatus()) + if(CRecordManager::getInstance()->RecordingStatus(chanlist[selected]->channel_id)) { if (CRecordManager::getInstance()->AskToStop(chanlist[selected]->channel_id)) { @@ -844,10 +857,6 @@ int CChannelList::show() res = bouquetList->exec(true); printf("CChannelList:: bouquetList->exec res %d\n", res); } -#if 0 - /* FIXME call this somewhere after show */ - CVFD::getInstance()->setMode(CVFD::MODE_TVRADIO); -#endif this->new_mode_active = 0; if(NeutrinoMessages::mode_ts == CNeutrinoApp::getInstance()->getMode()) @@ -1186,6 +1195,7 @@ int CChannelList::numericZap(int key) channelList->adjustToChannelID(orgList->getActiveChannel_ChannelID(), false); this->frameBuffer->paintBackground(); res = channelList->exec(); + CVFD::getInstance()->setMode(CVFD::MODE_TVRADIO); } delete channelList; return res; @@ -1204,6 +1214,7 @@ int CChannelList::numericZap(int key) if (channelList->getSize() != 0) { this->frameBuffer->paintBackground(); res = channelList->exec(); + CVFD::getInstance()->setMode(CVFD::MODE_TVRADIO); } delete channelList; } @@ -1561,7 +1572,6 @@ void CChannelList::paintItem2DetailsLine (int pos, int /*ch_index*/) int ypos1a = ypos1 + (fheight/2)-2; int ypos2a = ypos2 + (info_height/2)-2; fb_pixel_t col1 = COL_MENUCONTENT_PLUS_6; - fb_pixel_t col2 = COL_MENUCONTENT_PLUS_1; // Clear frameBuffer->paintBackgroundBoxRel(xpos,y, ConnectLineBox_Width, height+info_height); @@ -1570,30 +1580,12 @@ void CChannelList::paintItem2DetailsLine (int pos, int /*ch_index*/) if (pos >= 0) { //pos >= 0 && chanlist[ch_index]->currentEvent.description != "") { if(1) // FIXME why -> ? (!g_settings.channellist_extended) { - int fh = fheight > 10 ? fheight - 10: 5; - /* horizontal item mark */ - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos1+5, 4, fh, col1); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos1+5, 1, fh, col2); + //details line + CComponentsDetailLine details_line(xpos, ypos1a, ypos2a, fheight/2+1, info_height-RADIUS_LARGE*2); + details_line.paint(); - /* horizontal info mark */ - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos2+7, 4,info_height-14, col1); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos2+7, 1,info_height-14, col2); - - /* vertical connect line */ - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 4,ypos2a-ypos1a, col1); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 1,ypos2a-ypos1a+4, col2); - - /* vertical item line */ - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 12,4, col1); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 12,1, col2); - - /* vertical info line */ - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos2a, 12,4, col1); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-12, ypos2a, 8,1, col2); - -// frameBuffer->paintBoxRel(x, ypos2, width, info_height, col1, RADIUS_LARGE); + //info box frame frameBuffer->paintBoxFrame(x, ypos2, width, info_height, 2, col1, RADIUS_LARGE); - } } } @@ -1755,6 +1747,7 @@ void CChannelList::paintItem(int pos) if (pos == 0) { + /* FIXME move to calcSize() ? */ int w_max, w_min, h; ChannelList_Rec = 0; int recmode_icon_max = CRecordManager::RECMODE_REC, recmode_icon_min = CRecordManager::RECMODE_TSHIFT; @@ -1771,11 +1764,11 @@ void CChannelList::paintItem(int pos) for (uint32_t i = 0; i < chanlist.size(); i++) { rec_mode = CRecordManager::getInstance()->GetRecordMode(chanlist[i]->channel_id); - if (rec_mode == recmode_icon_max) + if (rec_mode & recmode_icon_max) { ChannelList_Rec = w_max; break; - } else if (rec_mode == recmode_icon_min) + } else if (rec_mode & recmode_icon_min) ChannelList_Rec = w_min; } if (ChannelList_Rec > 0) @@ -1787,9 +1780,9 @@ void CChannelList::paintItem(int pos) //set recording icon const char * rec_icon = ""; - if (rec_mode == CRecordManager::RECMODE_REC) + if (rec_mode & CRecordManager::RECMODE_REC) rec_icon = NEUTRINO_ICON_REC; - else if (rec_mode == CRecordManager::RECMODE_TSHIFT) + else if (rec_mode & CRecordManager::RECMODE_TSHIFT) rec_icon = NEUTRINO_ICON_AUTO_SHIFT; //calculating icons @@ -1805,7 +1798,6 @@ void CChannelList::paintItem(int pos) r_icon_x = r_icon_x - s_icon_w; //paint recording icon - //bool do_rec = CRecordManager::getInstance()->RecordingStatus(chanlist[curr]->channel_id); if (rec_mode != CRecordManager::RECMODE_OFF) frameBuffer->paintIcon(rec_icon, r_icon_x - r_icon_w, ypos, fheight);//ypos + (fheight - 16)/2); diff --git a/src/gui/channellist.h b/src/gui/channellist.h index 1159d6646..e3b360156 100644 --- a/src/gui/channellist.h +++ b/src/gui/channellist.h @@ -28,8 +28,9 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with this program; if not, write to the + Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. */ #include diff --git a/src/gui/epgview.cpp b/src/gui/epgview.cpp index d34d4205f..40f6616be 100644 --- a/src/gui/epgview.cpp +++ b/src/gui/epgview.cpp @@ -592,10 +592,12 @@ int CEpgData::show(const t_channel_id channel_id, uint64_t a_id, time_t* a_start // -- display more screenings on the same channel // -- 2002-05-03 rasc + has_follow_screenings = false; if (hasFollowScreenings(channel_id, epgData.title)) { processTextToArray(""); // UTF-8 processTextToArray(std::string(g_Locale->getText(LOCALE_EPGVIEWER_MORE_SCREENINGS)) + ':'); // UTF-8 FollowScreenings(channel_id, epgData.title); + has_follow_screenings = true; } COSDFader fader(g_settings.menu_Content_alpha); @@ -847,7 +849,24 @@ int CEpgData::show(const t_channel_id channel_id, uint64_t a_id, time_t* a_start printf("timerd not available\n"); break; } + case CRCInput::RC_blue: + { + if(!followlist.empty()){ + hide(); + CNeutrinoEventList *ee; + ee = new CNeutrinoEventList; + ee->exec(channel_id, g_Locale->getText(LOCALE_EPGVIEWER_MORE_SCREENINGS_SHORT),"","",followlist); // UTF-8 + delete ee; + if (!bigFonts && g_settings.bigFonts) { + g_Font[SNeutrinoSettings::FONT_TYPE_EPG_INFO1]->setSize((int)(g_Font[SNeutrinoSettings::FONT_TYPE_EPG_INFO1]->getSize() * BIG_FONT_FAKTOR)); + g_Font[SNeutrinoSettings::FONT_TYPE_EPG_INFO2]->setSize((int)(g_Font[SNeutrinoSettings::FONT_TYPE_EPG_INFO2]->getSize() * BIG_FONT_FAKTOR)); + } + bigFonts = g_settings.bigFonts; + show(channel_id,epgData.eventID,&epgData.epg_times.startzeit,false); + } + break; + } case CRCInput::RC_info: case CRCInput::RC_help: bigFonts = bigFonts ? false : true; @@ -1072,7 +1091,9 @@ int CEpgData::FollowScreenings (const t_channel_id /*channel_id*/, const std::st const struct button_label EpgButtons[] = { { NEUTRINO_ICON_BUTTON_RED , LOCALE_TIMERBAR_RECORDEVENT }, - { NEUTRINO_ICON_BUTTON_YELLOW, LOCALE_TIMERBAR_CHANNELSWITCH } + { NEUTRINO_ICON_BUTTON_YELLOW, LOCALE_TIMERBAR_CHANNELSWITCH }, + { NEUTRINO_ICON_BUTTON_BLUE, LOCALE_EPGVIEWER_MORE_SCREENINGS_SHORT } + }; void CEpgData::showTimerEventBar (bool pshow) @@ -1097,9 +1118,9 @@ void CEpgData::showTimerEventBar (bool pshow) frameBuffer->paintBoxRel(sx,y,ox,h, COL_INFOBAR_SHADOW_PLUS_1, RADIUS_LARGE, CORNER_BOTTOM);//round if (g_settings.recording_type != CNeutrinoApp::RECORDING_OFF) - ::paintButtons(x, y, 0, 2, EpgButtons, h); + ::paintButtons(x, y, 0, has_follow_screenings ? 3:2, EpgButtons, h); else - ::paintButtons(x, y, 0, 1, &EpgButtons[1], h); + ::paintButtons(x, y, 0, has_follow_screenings ? 2:1, &EpgButtons[1], h); #if 0 // Button: Timer Record & Channelswitch diff --git a/src/gui/epgview.h b/src/gui/epgview.h index ddc475a86..7b051c024 100644 --- a/src/gui/epgview.h +++ b/src/gui/epgview.h @@ -62,6 +62,7 @@ class CEpgData std::string epg_end; int epg_done; bool bigFonts; + bool has_follow_screenings; time_t tmp_curent_zeit; uint64_t prev_id; diff --git a/src/gui/eventlist.cpp b/src/gui/eventlist.cpp index db0901179..496f545cf 100644 --- a/src/gui/eventlist.cpp +++ b/src/gui/eventlist.cpp @@ -25,8 +25,9 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with this program; if not, write to the + Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H @@ -247,12 +248,12 @@ void CNeutrinoEventList::readEvents(const t_channel_id channel_id) } -int CNeutrinoEventList::exec(const t_channel_id channel_id, const std::string& channelname, const std::string& channelname_prev, const std::string& channelname_next) // UTF-8 +int CNeutrinoEventList::exec(const t_channel_id channel_id, const std::string& channelname, const std::string& channelname_prev, const std::string& channelname_next,const CChannelEventList &followlist) // UTF-8 { neutrino_msg_t msg; neutrino_msg_data_t data; bool in_search = false; - + showfollow = false; // Calculate iheight struct button_label tmp_button[1] = { { NEUTRINO_ICON_BUTTON_RED, NONEXISTANT_LOCALE } }; iheight = ::paintButtons(0, 0, 0, 1, tmp_button, 0, 0, false, COL_INFOBAR_SHADOW, NULL, 0, false); @@ -299,8 +300,13 @@ int CNeutrinoEventList::exec(const t_channel_id channel_id, const std::string& c COSDFader fader(g_settings.menu_Content_alpha); fader.StartFadeIn(); - - readEvents(channel_id); + if(!followlist.empty()){ + insert_iterator >ii(evtlist,evtlist.begin()); + copy(followlist.begin(), followlist.end(), ii); + showfollow = true; + }else{ + readEvents(channel_id); + } UpdateTimerList(); if(channelname_prev.empty(), channelname_next.empty()){ @@ -384,7 +390,7 @@ int CNeutrinoEventList::exec(const t_channel_id channel_id, const std::string& c showFunctionBar(paint_buttonbar, channel_id); } //sort - else if (msg == (neutrino_msg_t)g_settings.key_channelList_sort) + else if (!showfollow && (msg == (neutrino_msg_t)g_settings.key_channelList_sort)) { uint64_t selected_id = evtlist[selected].eventID; if(sort_mode==0) @@ -634,7 +640,7 @@ int CNeutrinoEventList::exec(const t_channel_id channel_id, const std::string& c } } } - else if ( msg==CRCInput::RC_green ) + else if (!showfollow && ( msg==CRCInput::RC_green )) { in_search = findEvents(); timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_EPG]); @@ -937,11 +943,12 @@ void CNeutrinoEventList::showFunctionBar (bool show, t_channel_id channel_id) bx+=w_button+4; } } - - // Button: Search - FunctionBarHeight = std::max(::paintButtons(bx, by, w_button, NUM_EVENTLIST_SECOND_BUTTON, EventListSecondButton), FunctionBarHeight); - bx+=w_button+4; + if(!showfollow){ + // Button: Search + FunctionBarHeight = std::max(::paintButtons(bx, by, w_button, NUM_EVENTLIST_SECOND_BUTTON, EventListSecondButton), FunctionBarHeight); + bx+=w_button+4; + } // Button: Timer Channelswitch if ((uint) g_settings.key_channelList_addremind != CRCInput::RC_nokey) { if (!g_settings.minimode) { @@ -960,14 +967,15 @@ void CNeutrinoEventList::showFunctionBar (bool show, t_channel_id channel_id) FunctionBarHeight = std::max(::paintButtons(bx, by, w_button, NUM_EVENTLIST_THIRD_BUTTON, EventListThirdButton), FunctionBarHeight); bx+=w_button+4; } - - // Button: Event Re-Sort - if ((uint) g_settings.key_channelList_sort != CRCInput::RC_nokey) { - // FIXME : display other icons depending on g_settings.key_channelList_sort - keyhelper.get(&dummy, &icon, g_settings.key_channelList_sort); - EventListFourthButton[0].button = icon; - FunctionBarHeight = std::max(::paintButtons(bx, by, w_button, NUM_EVENTLIST_THIRD_BUTTON, EventListFourthButton), FunctionBarHeight); -// bx+=w_button+4; + if(!showfollow){ + // Button: Event Re-Sort + if ((uint) g_settings.key_channelList_sort != CRCInput::RC_nokey) { + // FIXME : display other icons depending on g_settings.key_channelList_sort + keyhelper.get(&dummy, &icon, g_settings.key_channelList_sort); + EventListFourthButton[0].button = icon; + FunctionBarHeight = std::max(::paintButtons(bx, by, w_button, NUM_EVENTLIST_THIRD_BUTTON, EventListFourthButton), FunctionBarHeight); +// bx+=w_button+4; + } } } diff --git a/src/gui/eventlist.h b/src/gui/eventlist.h index 4578b16da..c1ef8b81b 100644 --- a/src/gui/eventlist.h +++ b/src/gui/eventlist.h @@ -25,8 +25,9 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with this program; if not, write to the + Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. */ @@ -117,13 +118,13 @@ class CNeutrinoEventList int timerPost; void UpdateTimerList(void); bool HasTimerConflicts(time_t starttime, time_t duration, event_id_t * epg_ID); - + bool showfollow; CTimerd::CTimerEventTypes isScheduled(t_channel_id channel_id, CChannelEvent * event, int * tID = NULL); public: CNeutrinoEventList(); ~CNeutrinoEventList(); - int exec(const t_channel_id channel_id, const std::string& channelname, const std::string& prev = "", const std::string& next = ""); // UTF-8 + int exec(const t_channel_id channel_id, const std::string& channelname, const std::string& prev = "", const std::string& next = "", const CChannelEventList &followlist = CChannelEventList ()); // UTF-8 }; class CEventListHandler : public CMenuTarget diff --git a/src/gui/hdd_menu.cpp b/src/gui/hdd_menu.cpp index b88bcda6a..178c56192 100644 --- a/src/gui/hdd_menu.cpp +++ b/src/gui/hdd_menu.cpp @@ -145,12 +145,19 @@ int CHDDMenuHandler::doMenu () CHDDChkExec chkexec; CHDDDestExec hddexec; - hddmenu->addItem(new CMenuForwarder(LOCALE_HDD_ACTIVATE, true, "", &hddexec, NULL, CRCInput::RC_red,NEUTRINO_ICON_BUTTON_RED)); + CMenuForwarder * mf = new CMenuForwarder(LOCALE_HDD_ACTIVATE, true, "", &hddexec, NULL, CRCInput::RC_red,NEUTRINO_ICON_BUTTON_RED); + mf->setHint("", LOCALE_MENU_HINT_HDD_APPLY); + hddmenu->addItem(mf); hddmenu->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_HDD_EXTENDED_SETTINGS)); - hddmenu->addItem( new CMenuOptionChooser(LOCALE_HDD_SLEEP, &g_settings.hdd_sleep, HDD_SLEEP_OPTIONS, HDD_SLEEP_OPTION_COUNT, true)); - hddmenu->addItem( new CMenuOptionChooser(LOCALE_HDD_NOISE, &g_settings.hdd_noise, HDD_NOISE_OPTIONS, HDD_NOISE_OPTION_COUNT, true)); + CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_HDD_SLEEP, &g_settings.hdd_sleep, HDD_SLEEP_OPTIONS, HDD_SLEEP_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_HDD_SLEEP); + hddmenu->addItem(mc); + + mc = new CMenuOptionChooser(LOCALE_HDD_NOISE, &g_settings.hdd_noise, HDD_NOISE_OPTIONS, HDD_NOISE_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_HDD_NOISE); + hddmenu->addItem(mc); //if(n > 0) hddmenu->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_HDD_MANAGE)); @@ -226,11 +233,19 @@ int CHDDMenuHandler::doMenu () tempMenu[i] = new CMenuWidget(str, NEUTRINO_ICON_SETTINGS); tempMenu[i]->addIntroItems(); //tempMenu->addItem( new CMenuOptionChooser(LOCALE_HDD_FS, &g_settings.hdd_fs, HDD_FILESYS_OPTIONS, HDD_FILESYS_OPTION_COUNT, true)); - tempMenu[i]->addItem(new CMenuForwarder(LOCALE_HDD_FORMAT, true, "", &fmtexec, namelist[i]->d_name)); - tempMenu[i]->addItem(new CMenuForwarder(LOCALE_HDD_CHECK, true, "", &chkexec, namelist[i]->d_name)); + + mf = new CMenuForwarder(LOCALE_HDD_FORMAT, true, "", &fmtexec, namelist[i]->d_name); + mf->setHint("", LOCALE_MENU_HINT_HDD_FORMAT); + tempMenu[i]->addItem(mf); + + mf = new CMenuForwarder(LOCALE_HDD_CHECK, true, "", &chkexec, namelist[i]->d_name); + mf->setHint("", LOCALE_MENU_HINT_HDD_CHECK); + tempMenu[i]->addItem(mf); snprintf(sstr, sizeof(sstr), "%s (%s)", g_Locale->getText(LOCALE_HDD_REMOVABLE_DEVICE), namelist[i]->d_name); - hddmenu->addItem(new CMenuForwarderNonLocalized((removable ? sstr : namelist[i]->d_name), enabled /*(removable || isroot) ? false : true*/, tmp_str[i], tempMenu[i])); + mf = new CMenuForwarderNonLocalized((removable ? sstr : namelist[i]->d_name), enabled, tmp_str[i], tempMenu[i]); + mf->setHint("", LOCALE_MENU_HINT_HDD_TOOLS); + hddmenu->addItem(mf); hdd_found = 1; free(namelist[i]); diff --git a/src/gui/infoviewer.cpp b/src/gui/infoviewer.cpp index 219926767..595044fc6 100644 --- a/src/gui/infoviewer.cpp +++ b/src/gui/infoviewer.cpp @@ -251,20 +251,26 @@ void CInfoViewer::paintTime (bool show_dot, bool firstPaint) void CInfoViewer::showRecordIcon (const bool show) { CRecordManager * crm = CRecordManager::getInstance(); - int rec_mode = crm->GetRecordMode(); - recordModeActive = rec_mode != CRecordManager::RECMODE_OFF; + recordModeActive = crm->RecordingStatus(); + /* FIXME if record or timeshift stopped while infobar visible, artifacts */ if (recordModeActive) { std::string Icon_Rec = NEUTRINO_ICON_REC_GRAY, Icon_Ts = NEUTRINO_ICON_AUTO_SHIFT_GRAY; - t_channel_id cci = g_RemoteControl->current_channel_id; - bool status_ts = crm->GetRecordMode(cci) == CRecordManager::RECMODE_TSHIFT; - bool status_rec = crm->GetRecordMode(cci) == CRecordManager::RECMODE_REC && !status_ts; - if (status_ts) + + /* global record mode */ + int rec_mode = crm->GetRecordMode(); + /* channel record mode */ + int ccrec_mode = crm->GetRecordMode(cci); + + /* set 'active' icons for current channel */ + if (ccrec_mode & CRecordManager::RECMODE_TSHIFT) Icon_Ts = NEUTRINO_ICON_AUTO_SHIFT; - if (status_rec) + + if (ccrec_mode & CRecordManager::RECMODE_REC) Icon_Rec = NEUTRINO_ICON_REC; + int records = crm->GetRecordCount(); const int radius = RADIUS_MIN; @@ -800,14 +806,19 @@ void CInfoViewer::loop(bool show_dot) } else if (!fileplay && !CMoviePlayerGui::getInstance().timeshift) { CNeutrinoApp *neutrino = CNeutrinoApp::getInstance (); if ((msg == (neutrino_msg_t) g_settings.key_quickzap_up) || (msg == (neutrino_msg_t) g_settings.key_quickzap_down) || (msg == CRCInput::RC_0) || (msg == NeutrinoMessages::SHOW_INFOBAR)) { - if ((g_settings.radiotext_enable) && (CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_radio)) + hideIt = false; // default + if ((g_settings.radiotext_enable) && (neutrino->getMode() == NeutrinoMessages::mode_radio)) hideIt = true; - else - hideIt = false; + int rec_mode = CRecordManager::getInstance()->GetRecordMode(); +#if 0 if ((rec_mode == CRecordManager::RECMODE_REC) || (rec_mode == CRecordManager::RECMODE_REC_TSHIFT)) hideIt = true; - //hideIt = (g_settings.timing[SNeutrinoSettings::TIMING_INFOBAR] == 0) ? true : false; +#endif + /* hide, if record (not timeshift only) is running -> neutrino will show channel list */ + if (rec_mode & CRecordManager::RECMODE_REC) + hideIt = true; + g_RCInput->postMsg (msg, data); res = messages_return::cancel_info; } else if (msg == NeutrinoMessages::EVT_TIMESET) { diff --git a/src/gui/keybind_setup.cpp b/src/gui/keybind_setup.cpp index 21f8dce61..ae783f70e 100644 --- a/src/gui/keybind_setup.cpp +++ b/src/gui/keybind_setup.cpp @@ -86,7 +86,7 @@ int CKeybindSetup::exec(CMenuTarget* parent, const std::string &actionKey) { parent->hide(); } - + if(actionKey == "loadkeys") { CFileBrowser fileBrowser; CFileFilter fileFilter; @@ -148,43 +148,44 @@ typedef struct key_settings_t { const neutrino_locale_t keydescription; int * keyvalue_p; + const neutrino_locale_t hint; } key_settings_struct_t; const key_settings_struct_t key_settings[CKeybindSetup::KEYBINDS_COUNT] = -{ - {LOCALE_KEYBINDINGMENU_TVRADIOMODE, &g_settings.key_tvradio_mode, }, - {LOCALE_KEYBINDINGMENU_POWEROFF, &g_settings.key_power_off, }, - {LOCALE_KEYBINDINGMENU_PAGEUP, &g_settings.key_channelList_pageup, }, - {LOCALE_KEYBINDINGMENU_PAGEDOWN, &g_settings.key_channelList_pagedown, }, - {LOCALE_EXTRA_KEY_LIST_START, &g_settings.key_list_start, }, - {LOCALE_EXTRA_KEY_LIST_END, &g_settings.key_list_end, }, - {LOCALE_KEYBINDINGMENU_CANCEL, &g_settings.key_channelList_cancel, }, - {LOCALE_KEYBINDINGMENU_SORT, &g_settings.key_channelList_sort, }, - {LOCALE_KEYBINDINGMENU_ADDRECORD, &g_settings.key_channelList_addrecord, }, - {LOCALE_KEYBINDINGMENU_ADDREMIND, &g_settings.key_channelList_addremind, }, - {LOCALE_KEYBINDINGMENU_BOUQUETUP, &g_settings.key_bouquet_up, }, - {LOCALE_KEYBINDINGMENU_BOUQUETDOWN, &g_settings.key_bouquet_down, }, - {LOCALE_EXTRA_KEY_CURRENT_TRANSPONDER, &g_settings.key_current_transponder, }, - {LOCALE_KEYBINDINGMENU_CHANNELUP, &g_settings.key_quickzap_up, }, - {LOCALE_KEYBINDINGMENU_CHANNELDOWN, &g_settings.key_quickzap_down, }, - {LOCALE_KEYBINDINGMENU_SUBCHANNELUP, &g_settings.key_subchannel_up, }, - {LOCALE_KEYBINDINGMENU_SUBCHANNELDOWN, &g_settings.key_subchannel_down, }, - {LOCALE_KEYBINDINGMENU_ZAPHISTORY, &g_settings.key_zaphistory, }, - {LOCALE_KEYBINDINGMENU_LASTCHANNEL, &g_settings.key_lastchannel, }, - {LOCALE_MPKEY_REWIND, &g_settings.mpkey_rewind, }, - {LOCALE_MPKEY_FORWARD, &g_settings.mpkey_forward, }, - {LOCALE_MPKEY_PAUSE, &g_settings.mpkey_pause, }, - {LOCALE_MPKEY_STOP, &g_settings.mpkey_stop, }, - {LOCALE_MPKEY_PLAY, &g_settings.mpkey_play, }, - {LOCALE_MPKEY_AUDIO, &g_settings.mpkey_audio, }, - {LOCALE_MPKEY_TIME, &g_settings.mpkey_time, }, - {LOCALE_MPKEY_BOOKMARK, &g_settings.mpkey_bookmark, }, - {LOCALE_EXTRA_KEY_TIMESHIFT, &g_settings.key_timeshift, }, - {LOCALE_MPKEY_PLUGIN, &g_settings.mpkey_plugin, }, +{ + {LOCALE_KEYBINDINGMENU_TVRADIOMODE, &g_settings.key_tvradio_mode, LOCALE_MENU_HINT_KEY_TVRADIOMODE }, + {LOCALE_KEYBINDINGMENU_POWEROFF, &g_settings.key_power_off, LOCALE_MENU_HINT_KEY_POWEROFF }, + {LOCALE_KEYBINDINGMENU_PAGEUP, &g_settings.key_channelList_pageup, LOCALE_MENU_HINT_KEY_PAGEUP }, + {LOCALE_KEYBINDINGMENU_PAGEDOWN, &g_settings.key_channelList_pagedown, LOCALE_MENU_HINT_KEY_PAGEDOWN }, + {LOCALE_EXTRA_KEY_LIST_START, &g_settings.key_list_start, LOCALE_MENU_HINT_KEY_LIST_START }, + {LOCALE_EXTRA_KEY_LIST_END, &g_settings.key_list_end, LOCALE_MENU_HINT_KEY_LIST_END }, + {LOCALE_KEYBINDINGMENU_CANCEL, &g_settings.key_channelList_cancel, LOCALE_MENU_HINT_KEY_CANCEL }, + {LOCALE_KEYBINDINGMENU_SORT, &g_settings.key_channelList_sort, LOCALE_MENU_HINT_KEY_SORT }, + {LOCALE_KEYBINDINGMENU_ADDRECORD, &g_settings.key_channelList_addrecord, LOCALE_MENU_HINT_KEY_ADDRECORD }, + {LOCALE_KEYBINDINGMENU_ADDREMIND, &g_settings.key_channelList_addremind, LOCALE_MENU_HINT_KEY_ADDREMIND }, + {LOCALE_KEYBINDINGMENU_BOUQUETUP, &g_settings.key_bouquet_up, LOCALE_MENU_HINT_KEY_BOUQUETUP }, + {LOCALE_KEYBINDINGMENU_BOUQUETDOWN, &g_settings.key_bouquet_down, LOCALE_MENU_HINT_KEY_BOUQUETDOWN }, + {LOCALE_EXTRA_KEY_CURRENT_TRANSPONDER, &g_settings.key_current_transponder, LOCALE_MENU_HINT_KEY_TRANSPONDER }, + {LOCALE_KEYBINDINGMENU_CHANNELUP, &g_settings.key_quickzap_up, LOCALE_MENU_HINT_KEY_CHANNELUP }, + {LOCALE_KEYBINDINGMENU_CHANNELDOWN, &g_settings.key_quickzap_down, LOCALE_MENU_HINT_KEY_CHANNELDOWN }, + {LOCALE_KEYBINDINGMENU_SUBCHANNELUP, &g_settings.key_subchannel_up, LOCALE_MENU_HINT_KEY_SUBCHANNELUP }, + {LOCALE_KEYBINDINGMENU_SUBCHANNELDOWN, &g_settings.key_subchannel_down, LOCALE_MENU_HINT_KEY_SUBCHANNELDOWN }, + {LOCALE_KEYBINDINGMENU_ZAPHISTORY, &g_settings.key_zaphistory, LOCALE_MENU_HINT_KEY_HISTORY }, + {LOCALE_KEYBINDINGMENU_LASTCHANNEL, &g_settings.key_lastchannel, LOCALE_MENU_HINT_KEY_LASTCHANNEL }, + {LOCALE_MPKEY_REWIND, &g_settings.mpkey_rewind, LOCALE_MENU_HINT_KEY_MPREWIND }, + {LOCALE_MPKEY_FORWARD, &g_settings.mpkey_forward, LOCALE_MENU_HINT_KEY_MPFORWARD }, + {LOCALE_MPKEY_PAUSE, &g_settings.mpkey_pause, LOCALE_MENU_HINT_KEY_MPPAUSE }, + {LOCALE_MPKEY_STOP, &g_settings.mpkey_stop, LOCALE_MENU_HINT_KEY_MPSTOP }, + {LOCALE_MPKEY_PLAY, &g_settings.mpkey_play, LOCALE_MENU_HINT_KEY_MPPLAY }, + {LOCALE_MPKEY_AUDIO, &g_settings.mpkey_audio, LOCALE_MENU_HINT_KEY_MPAUDIO }, + {LOCALE_MPKEY_TIME, &g_settings.mpkey_time, LOCALE_MENU_HINT_KEY_MPTIME }, + {LOCALE_MPKEY_BOOKMARK, &g_settings.mpkey_bookmark, LOCALE_MENU_HINT_KEY_MPBOOKMARK }, + {LOCALE_EXTRA_KEY_TIMESHIFT, &g_settings.key_timeshift, LOCALE_MENU_HINT_KEY_MPTIMESHIFT }, + {LOCALE_MPKEY_PLUGIN, &g_settings.mpkey_plugin, LOCALE_MENU_HINT_KEY_MPPLUGIN }, /*{LOCALE_EXTRA_KEY_PLUGIN, &g_settings.key_plugin, },*/ - {LOCALE_EXTRA_KEY_UNLOCK, &g_settings.key_unlock, }, - {LOCALE_EXTRA_KEY_SCREENSHOT, &g_settings.key_screenshot, } + {LOCALE_EXTRA_KEY_UNLOCK, &g_settings.key_unlock, LOCALE_MENU_HINT_KEY_UNLOCK}, + {LOCALE_EXTRA_KEY_SCREENSHOT, &g_settings.key_screenshot, LOCALE_MENU_HINT_KEY_SCREENSHOT } }; @@ -203,27 +204,45 @@ int CKeybindSetup::showKeySetup() //keysetup menu CMenuWidget* keySettings = new CMenuWidget(LOCALE_MAINSETTINGS_HEAD, NEUTRINO_ICON_KEYBINDING, width, MN_WIDGET_ID_KEYSETUP); keySettings->addIntroItems(LOCALE_MAINSETTINGS_KEYBINDING); - + //keybindings menu CMenuWidget bindSettings(LOCALE_MAINSETTINGS_HEAD, NEUTRINO_ICON_KEYBINDING, width, MN_WIDGET_ID_KEYSETUP_KEYBINDING); - + //keybindings int shortcut = 1; showKeyBindSetup(&bindSettings); - keySettings->addItem(new CMenuForwarder(LOCALE_KEYBINDINGMENU_HEAD, true, NULL, &bindSettings, NULL, CRCInput::convertDigitToKey(shortcut++))); + CMenuForwarder * mf; + + mf = new CMenuForwarder(LOCALE_KEYBINDINGMENU_HEAD, true, NULL, &bindSettings, NULL, CRCInput::convertDigitToKey(shortcut++)); + mf->setHint("", LOCALE_MENU_HINT_KEY_BINDING); + keySettings->addItem(mf); keySettings->addItem(GenericMenuSeparator); - keySettings->addItem(new CMenuForwarder(LOCALE_EXTRA_LOADKEYS, true, NULL, this, "loadkeys", CRCInput::convertDigitToKey(shortcut++))); - keySettings->addItem(new CMenuForwarder(LOCALE_EXTRA_SAVEKEYS, true, NULL, this, "savekeys", CRCInput::convertDigitToKey(shortcut++))); + + mf = new CMenuForwarder(LOCALE_EXTRA_LOADKEYS, true, NULL, this, "loadkeys", CRCInput::convertDigitToKey(shortcut++)); + mf->setHint("", LOCALE_MENU_HINT_KEY_LOAD); + keySettings->addItem(mf); + + mf = new CMenuForwarder(LOCALE_EXTRA_SAVEKEYS, true, NULL, this, "savekeys", CRCInput::convertDigitToKey(shortcut++)); + mf->setHint("", LOCALE_MENU_HINT_KEY_SAVE); + keySettings->addItem(mf); //rc tuning CStringInput keySettings_repeat_genericblocker(LOCALE_KEYBINDINGMENU_REPEATBLOCKGENERIC, g_settings.repeat_genericblocker, 3, LOCALE_REPEATBLOCKER_HINT_1, LOCALE_REPEATBLOCKER_HINT_2, "0123456789 ", this); CStringInput keySettings_repeatBlocker(LOCALE_KEYBINDINGMENU_REPEATBLOCK, g_settings.repeat_blocker, 3, LOCALE_REPEATBLOCKER_HINT_1, LOCALE_REPEATBLOCKER_HINT_2, "0123456789 ", this); keySettings->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_KEYBINDINGMENU_RC)); - if (RC_HW_SELECT) - keySettings->addItem(new CMenuOptionChooser(LOCALE_KEYBINDINGMENU_REMOTECONTROL_HARDWARE, &g_settings.remote_control_hardware, KEYBINDINGMENU_REMOTECONTROL_HARDWARE_OPTIONS, KEYBINDINGMENU_REMOTECONTROL_HARDWARE_OPTION_COUNT, true)); - keySettings->addItem(new CMenuForwarder(LOCALE_KEYBINDINGMENU_REPEATBLOCK, true, g_settings.repeat_blocker, &keySettings_repeatBlocker)); - keySettings->addItem(new CMenuForwarder(LOCALE_KEYBINDINGMENU_REPEATBLOCKGENERIC, true, g_settings.repeat_genericblocker, &keySettings_repeat_genericblocker)); + if (RC_HW_SELECT) { + CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_KEYBINDINGMENU_REMOTECONTROL_HARDWARE, &g_settings.remote_control_hardware, KEYBINDINGMENU_REMOTECONTROL_HARDWARE_OPTIONS, KEYBINDINGMENU_REMOTECONTROL_HARDWARE_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_KEY_HARDWARE); + keySettings->addItem(mc); + } + mf = new CMenuForwarder(LOCALE_KEYBINDINGMENU_REPEATBLOCK, true, g_settings.repeat_blocker, &keySettings_repeatBlocker); + mf->setHint("", LOCALE_MENU_HINT_KEY_REPEATBLOCK); + keySettings->addItem(mf); + + mf = new CMenuForwarder(LOCALE_KEYBINDINGMENU_REPEATBLOCKGENERIC, true, g_settings.repeat_genericblocker, &keySettings_repeat_genericblocker); + mf->setHint("", LOCALE_MENU_HINT_KEY_REPEATBLOCKGENERIC); + keySettings->addItem(mf); int res = keySettings->exec(NULL, ""); @@ -238,7 +257,7 @@ int CKeybindSetup::showKeySetup() g_settings.remote_control_hardware = org_remote_control_hardware; g_RCInput->CRCInput::set_rc_hw(); } - } + } delete keySettings; return res; @@ -247,76 +266,123 @@ int CKeybindSetup::showKeySetup() void CKeybindSetup::showKeyBindSetup(CMenuWidget *bindSettings) { + CMenuForwarder * mf; + bindSettings->addIntroItems(LOCALE_KEYBINDINGMENU_HEAD); - + for (int i = 0; i < KEYBINDS_COUNT; i++) keychooser[i] = new CKeyChooser(key_settings[i].keyvalue_p, key_settings[i].keydescription/*as head caption*/, NEUTRINO_ICON_SETTINGS); - + //modes CMenuWidget* bindSettings_modes = new CMenuWidget(LOCALE_KEYBINDINGMENU_HEAD, NEUTRINO_ICON_KEYBINDING, width, MN_WIDGET_ID_KEYSETUP_KEYBINDING_MODES); showKeyBindModeSetup(bindSettings_modes); - bindSettings->addItem(new CMenuDForwarder(LOCALE_KEYBINDINGMENU_MODECHANGE, true, NULL, bindSettings_modes, NULL, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED)); + mf = new CMenuDForwarder(LOCALE_KEYBINDINGMENU_MODECHANGE, true, NULL, bindSettings_modes, NULL, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); + mf->setHint("", LOCALE_MENU_HINT_KEY_MODECHANGE); + bindSettings->addItem(mf); // channellist keybindings CMenuWidget* bindSettings_chlist = new CMenuWidget(LOCALE_KEYBINDINGMENU_HEAD, NEUTRINO_ICON_KEYBINDING, width, MN_WIDGET_ID_KEYSETUP_KEYBINDING_CHANNELLIST); showKeyBindChannellistSetup(bindSettings_chlist); - bindSettings->addItem(new CMenuDForwarder(LOCALE_KEYBINDINGMENU_CHANNELLIST, true, NULL, bindSettings_chlist, NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN)); + mf = new CMenuDForwarder(LOCALE_KEYBINDINGMENU_CHANNELLIST, true, NULL, bindSettings_chlist, NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf->setHint("", LOCALE_MENU_HINT_KEY_CHANNELLIST); + bindSettings->addItem(mf); // Zapping keys quickzap CMenuWidget* bindSettings_qzap = new CMenuWidget(LOCALE_KEYBINDINGMENU_HEAD, NEUTRINO_ICON_KEYBINDING, width, MN_WIDGET_ID_KEYSETUP_KEYBINDING_QUICKZAP); showKeyBindQuickzapSetup(bindSettings_qzap); - bindSettings->addItem(new CMenuDForwarder(LOCALE_KEYBINDINGMENU_QUICKZAP, true, NULL, bindSettings_qzap, NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW)); + mf = new CMenuDForwarder(LOCALE_KEYBINDINGMENU_QUICKZAP, true, NULL, bindSettings_qzap, NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); + mf->setHint("", LOCALE_MENU_HINT_KEY_QUICKZAP); + bindSettings->addItem(mf); //movieplayer CMenuWidget* bindSettings_mplayer = new CMenuWidget(LOCALE_KEYBINDINGMENU_HEAD, NEUTRINO_ICON_KEYBINDING, width, MN_WIDGET_ID_KEYSETUP_KEYBINDING_MOVIEPLAYER); showKeyBindMovieplayerSetup(bindSettings_mplayer); - bindSettings->addItem(new CMenuDForwarder(LOCALE_MAINMENU_MOVIEPLAYER, true, NULL, bindSettings_mplayer, NULL, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE)); + mf = new CMenuDForwarder(LOCALE_MAINMENU_MOVIEPLAYER, true, NULL, bindSettings_mplayer, NULL, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); + mf->setHint("", LOCALE_MENU_HINT_KEY_MOVIEPLAYER); + bindSettings->addItem(mf); //misc bindSettings->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_KEYBINDINGMENU_MISC)); //bindSettings->addItem(new CMenuDForwarder(keydescription[KEY_PLUGIN], true, NULL, keychooser[KEY_PLUGIN])); - bindSettings->addItem(new CMenuDForwarder(key_settings[KEY_UNLOCK].keydescription, true, keychooser[KEY_UNLOCK]->getKeyName(), keychooser[KEY_UNLOCK])); - bindSettings->addItem(new CMenuDForwarder(key_settings[KEY_SCREENSHOT].keydescription, true, keychooser[KEY_SCREENSHOT]->getKeyName(), keychooser[KEY_SCREENSHOT])); + // unlock + mf = new CMenuDForwarder(key_settings[KEY_UNLOCK].keydescription, true, keychooser[KEY_UNLOCK]->getKeyName(), keychooser[KEY_UNLOCK]); + mf->setHint("", key_settings[KEY_UNLOCK].hint); + bindSettings->addItem(mf); + // screenshot + mf = new CMenuDForwarder(key_settings[KEY_SCREENSHOT].keydescription, true, keychooser[KEY_SCREENSHOT]->getKeyName(), keychooser[KEY_SCREENSHOT]); + mf->setHint("", key_settings[KEY_SCREENSHOT].hint); + bindSettings->addItem(mf); + //bindSettings->addItem(new CMenuOptionChooser(LOCALE_EXTRA_ZAP_CYCLE, &g_settings.zap_cycle, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); - bindSettings->addItem(new CMenuOptionChooser(LOCALE_EXTRA_MENU_LEFT_EXIT, &g_settings.menu_left_exit, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); - bindSettings->addItem(new CMenuOptionChooser(LOCALE_EXTRA_AUDIO_RUN_PLAYER, &g_settings.audio_run_player, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); - bindSettings->addItem(new CMenuOptionChooser(LOCALE_KEYBINDINGMENU_MODE_LEFT_RIGHT_KEY_TV, &g_settings.mode_left_right_key_tv, KEYBINDINGMENU_MODE_LEFT_RIGHT_KEY_TV_OPTIONS, KEYBINDINGMENU_MODE_LEFT_RIGHT_KEY_TV_COUNT, true)); + // left-exit, FIXME is this option really change anything ?? + CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_EXTRA_MENU_LEFT_EXIT, &g_settings.menu_left_exit, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_KEY_LEFT_EXIT); + bindSettings->addItem(mc); + + // audio for audio player + mc = new CMenuOptionChooser(LOCALE_EXTRA_AUDIO_RUN_PLAYER, &g_settings.audio_run_player, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_KEY_AUDIO); + bindSettings->addItem(mc); + + // right key + mc = new CMenuOptionChooser(LOCALE_KEYBINDINGMENU_MODE_LEFT_RIGHT_KEY_TV, &g_settings.mode_left_right_key_tv, KEYBINDINGMENU_MODE_LEFT_RIGHT_KEY_TV_OPTIONS, KEYBINDINGMENU_MODE_LEFT_RIGHT_KEY_TV_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_KEY_RIGHT); + bindSettings->addItem(mc); } void CKeybindSetup::showKeyBindModeSetup(CMenuWidget *bindSettings_modes) { + CMenuForwarder * mf; bindSettings_modes->addIntroItems(LOCALE_KEYBINDINGMENU_MODECHANGE); - - bindSettings_modes->addItem(new CMenuDForwarder(key_settings[KEY_TV_RADIO_MODE].keydescription, true, keychooser[KEY_TV_RADIO_MODE]->getKeyName(), keychooser[KEY_TV_RADIO_MODE], NULL, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED)); - bindSettings_modes->addItem(new CMenuDForwarder(key_settings[KEY_POWER_OFF].keydescription, true, keychooser[KEY_POWER_OFF]->getKeyName(), keychooser[KEY_POWER_OFF], NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN)); + + // tv/radio + mf = new CMenuDForwarder(key_settings[KEY_TV_RADIO_MODE].keydescription, true, keychooser[KEY_TV_RADIO_MODE]->getKeyName(), keychooser[KEY_TV_RADIO_MODE], NULL, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); + mf->setHint("", key_settings[KEY_TV_RADIO_MODE].hint); + bindSettings_modes->addItem(mf); + + mf = new CMenuDForwarder(key_settings[KEY_POWER_OFF].keydescription, true, keychooser[KEY_POWER_OFF]->getKeyName(), keychooser[KEY_POWER_OFF], NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf->setHint("", key_settings[KEY_POWER_OFF].hint); + bindSettings_modes->addItem(mf); } void CKeybindSetup::showKeyBindChannellistSetup(CMenuWidget *bindSettings_chlist) { bindSettings_chlist->addIntroItems(LOCALE_KEYBINDINGMENU_CHANNELLIST); +#if 0 CMenuOptionChooser *oj = new CMenuOptionChooser(LOCALE_KEYBINDINGMENU_BOUQUETHANDLING, &g_settings.bouquetlist_mode, KEYBINDINGMENU_BOUQUETHANDLING_OPTIONS, KEYBINDINGMENU_BOUQUETHANDLING_OPTION_COUNT, true ); bindSettings_chlist->addItem(oj); +#endif + for (int i = KEY_PAGE_UP; i <= KEY_CURRENT_TRANSPONDER; i++) { + CMenuForwarder * mf = new CMenuDForwarder(key_settings[i].keydescription, true, keychooser[i]->getKeyName(), keychooser[i]); + mf->setHint("", key_settings[i].hint); + bindSettings_chlist->addItem(mf); + } - for (int i = KEY_PAGE_UP; i <= KEY_CURRENT_TRANSPONDER; i++) - bindSettings_chlist->addItem(new CMenuDForwarder(key_settings[i].keydescription, true, keychooser[i]->getKeyName(), keychooser[i])); - - bindSettings_chlist->addItem(new CMenuOptionChooser(LOCALE_EXTRA_SMS_CHANNEL, &g_settings.sms_channel, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); + CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_EXTRA_SMS_CHANNEL, &g_settings.sms_channel, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_KEY_CHANNEL_SMS); + bindSettings_chlist->addItem(mc); } void CKeybindSetup::showKeyBindQuickzapSetup(CMenuWidget *bindSettings_qzap) { bindSettings_qzap->addIntroItems(LOCALE_KEYBINDINGMENU_QUICKZAP); - for (int i = KEY_CHANNEL_UP; i <= KEY_LASTCHANNEL; i++) - bindSettings_qzap->addItem(new CMenuDForwarder(key_settings[i].keydescription, true, keychooser[i]->getKeyName(), keychooser[i])); + for (int i = KEY_CHANNEL_UP; i <= KEY_LASTCHANNEL; i++) { + CMenuForwarder * mf = new CMenuDForwarder(key_settings[i].keydescription, true, keychooser[i]->getKeyName(), keychooser[i]); + mf->setHint("", key_settings[i].hint); + bindSettings_qzap->addItem(mf); + } } void CKeybindSetup::showKeyBindMovieplayerSetup(CMenuWidget *bindSettings_mplayer) { bindSettings_mplayer->addIntroItems(LOCALE_MAINMENU_MOVIEPLAYER); - - for (int i = MPKEY_REWIND; i <= MPKEY_PLUGIN; i++) - bindSettings_mplayer->addItem(new CMenuDForwarder(key_settings[i].keydescription, true, keychooser[i]->getKeyName(), keychooser[i])); + + for (int i = MPKEY_REWIND; i < MPKEY_PLUGIN; i++) { + CMenuForwarder * mf = new CMenuDForwarder(key_settings[i].keydescription, true, keychooser[i]->getKeyName(), keychooser[i]); + mf->setHint("", key_settings[i].hint); + bindSettings_mplayer->addItem(mf); + } } bool CKeybindSetup::changeNotify(const neutrino_locale_t OptionName, void * /* data */) diff --git a/src/gui/miscsettings_menu.cpp b/src/gui/miscsettings_menu.cpp index 501fefc32..01ec9cfb6 100644 --- a/src/gui/miscsettings_menu.cpp +++ b/src/gui/miscsettings_menu.cpp @@ -276,7 +276,7 @@ void CMiscMenue::showMiscSettingsMenuEnergy(CMenuWidget *ms_energy) ms_energy->addIntroItems(LOCALE_MISCSETTINGS_ENERGY); CMenuOptionChooser *m1 = new CMenuOptionChooser(LOCALE_MISCSETTINGS_SHUTDOWN_REAL_RCDELAY, &g_settings.shutdown_real_rcdelay, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, !g_settings.shutdown_real); - m1->setHint("", LOCALE_MENU_HINT_SHUTDOWN_REAL_RCDELAY); + m1->setHint("", LOCALE_MENU_HINT_SHUTDOWN_RCDELAY); CStringInput * miscSettings_shutdown_count = new CStringInput(LOCALE_MISCSETTINGS_SHUTDOWN_COUNT, g_settings.shutdown_count, 3, LOCALE_MISCSETTINGS_SHUTDOWN_COUNT_HINT1, LOCALE_MISCSETTINGS_SHUTDOWN_COUNT_HINT2, "0123456789 "); CMenuForwarder *m2 = new CMenuDForwarder(LOCALE_MISCSETTINGS_SHUTDOWN_COUNT, !g_settings.shutdown_real, g_settings.shutdown_count, miscSettings_shutdown_count); diff --git a/src/gui/motorcontrol.cpp b/src/gui/motorcontrol.cpp index c36e16096..6c42ab6d4 100644 --- a/src/gui/motorcontrol.cpp +++ b/src/gui/motorcontrol.cpp @@ -138,7 +138,7 @@ int CMotorControl::exec(CMenuTarget* parent, const std::string &) for(sit = satellitePositions.begin(); sit != satellitePositions.end(); sit++) { if(!strcmp(sit->second.name.c_str(),scansettings.satNameNoDiseqc)) { sat.position = sit->first; - strncpy(sat.satName, scansettings.satNameNoDiseqc, 50); + strncpy(sat.satName, scansettings.satNameNoDiseqc, 49); satList.push_back(sat); if(sit->second.motor_position) motorPosition = sit->second.motor_position; @@ -148,7 +148,7 @@ int CMotorControl::exec(CMenuTarget* parent, const std::string &) #endif /* send satellite list to zapit */ sat.position = CServiceManager::getInstance()->GetSatellitePosition(scansettings.satNameNoDiseqc); - strncpy(sat.satName, scansettings.satNameNoDiseqc, 50); + strncpy(sat.satName, scansettings.satNameNoDiseqc, 49); satList.push_back(sat); satellite_map_t & satmap = frontend->getSatellites(); diff --git a/src/gui/moviebrowser.cpp b/src/gui/moviebrowser.cpp index bdd13f175..219d90c2f 100644 --- a/src/gui/moviebrowser.cpp +++ b/src/gui/moviebrowser.cpp @@ -2884,7 +2884,7 @@ int CMovieBrowser::showMovieInfoMenu(MI_MOVIE_INFO* movie_info) if(movie_info != NULL) { - strncpy(dirItNr, m_dirNames[movie_info->dirItNr].c_str(),BUFFER_SIZE); + strncpy(dirItNr, m_dirNames[movie_info->dirItNr].c_str(),BUFFER_SIZE-1); snprintf(size,BUFFER_SIZE,"%5llu",movie_info->file.Size>>20); } @@ -3113,7 +3113,7 @@ int CMovieBrowser::showStartPosSelectionMenu(void) // P2 CMenuWidgetSelection startPosSelectionMenu(LOCALE_MOVIEBROWSER_HEAD , NEUTRINO_ICON_MOVIEPLAYER); startPosSelectionMenu.enableFade(false); - startPosSelectionMenu.addIntroItems(LOCALE_MOVIEBROWSER_START_HEAD); + startPosSelectionMenu.addIntroItems(LOCALE_MOVIEBROWSER_START_HEAD, NONEXISTANT_LOCALE, CMenuWidget::BTN_TYPE_CANCEL); if(m_movieSelectionHandler->bookmarks.start != 0) { @@ -3448,7 +3448,7 @@ CMenuSelector::CMenuSelector(const char * OptionName, const bool Active , std::s height = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); optionValueString = &OptionValue; optionName = OptionName; - strncpy(buffer,OptionValue.c_str(),BUFFER_MAX); + strncpy(buffer,OptionValue.c_str(),BUFFER_MAX-1); buffer[BUFFER_MAX-1] = 0;// terminate string optionValue = buffer; active = Active; @@ -3841,7 +3841,8 @@ int find_gop(unsigned char *buf, int r) } return -1; } - +#if 0 +//never used off64_t fake_read(int fd, unsigned char *buf, size_t size, off64_t fsize) { off64_t cur = lseek64 (fd, 0, SEEK_CUR); @@ -3852,7 +3853,7 @@ off64_t fake_read(int fd, unsigned char *buf, size_t size, off64_t fsize) else return size; } - +#endif #define PSI_SIZE 188*3 static int read_psi(char * spart, unsigned char * buf) { diff --git a/src/gui/movieinfo.cpp b/src/gui/movieinfo.cpp index a455736b3..e5c4f0912 100644 --- a/src/gui/movieinfo.cpp +++ b/src/gui/movieinfo.cpp @@ -83,7 +83,7 @@ bool CMovieInfo::convertTs2XmlName(char *char_filename, int size) bool result = false; std::string filename = char_filename; if (convertTs2XmlName(&filename) == true) { - strncpy(char_filename, filename.c_str(), size); + strncpy(char_filename, filename.c_str(), size-1); char_filename[size - 1] = 0; result = true; } @@ -321,6 +321,8 @@ bool CMovieInfo::loadMovieInfo(MI_MOVIE_INFO * movie_info, CFile * file) /************************************************************************ ************************************************************************/ +#if 0 +//never used bool CMovieInfo::parseXmlTree(char */*text*/, MI_MOVIE_INFO * /*movie_info*/) { #ifndef XMLTREE_LIB @@ -413,7 +415,7 @@ bool CMovieInfo::parseXmlTree(char */*text*/, MI_MOVIE_INFO * /*movie_info*/) #endif /* XMLTREE_LIB */ return (true); } - +#endif /************************************************************************ ************************************************************************/ @@ -513,6 +515,8 @@ void CMovieInfo::showMovieInfo(MI_MOVIE_INFO & movie_info) /************************************************************************ ************************************************************************/ +#if 0 +//never used void CMovieInfo::printDebugMovieInfo(MI_MOVIE_INFO & movie_info) { TRACE(" FileName: %s", movie_info.file.Name.c_str()); @@ -561,7 +565,7 @@ void CMovieInfo::printDebugMovieInfo(MI_MOVIE_INFO & movie_info) } } } - +#endif /************************************************************************ ************************************************************************/ diff --git a/src/gui/network_service.cpp b/src/gui/network_service.cpp index d618528f3..6585c919c 100644 --- a/src/gui/network_service.cpp +++ b/src/gui/network_service.cpp @@ -51,8 +51,8 @@ struct network_service #define SERVICE_COUNT 4 static struct network_service services[SERVICE_COUNT] = { - { "FTP", "vsftpd", "", LOCALE_MENU_HINT_NET_TELNET, "", 0 }, - { "Telnet", "telnetd", "-l/bin/login", LOCALE_MENU_HINT_NET_FTPD, "", 0 }, + { "FTP", "vsftpd", "", LOCALE_MENU_HINT_NET_FTPD, "", 0 }, + { "Telnet", "telnetd", "-l/bin/login", LOCALE_MENU_HINT_NET_TELNET, "", 0 }, { "DjMount", "djmount", "-o iocharset=utf8 /media/00upnp/", LOCALE_MENU_HINT_NET_DJMOUNT, "", 0 }, { "uShare", "ushare", "-D", LOCALE_MENU_HINT_NET_USHARE, "", 0 } }; @@ -142,10 +142,51 @@ int CNetworkServiceSetup::showNetworkServiceSetup() CNetworkService * items[SERVICE_COUNT]; + //telnetd used inetd + bool useinetd = false; + char *buf=NULL; + size_t len = 0; + + FILE* fd = fopen("/etc/inetd.conf", "r"); + if(fd) + { + while(!feof(fd)) + { + if(getline(&buf, &len, fd)!=-1) + { + if (strstr(buf, "telnetd") != NULL) + { + useinetd = true; + break; + } + } + } + fclose(fd); + if(buf) + free(buf); + } + + //set active when found + bool active; + for(unsigned i = 0; i < SERVICE_COUNT; i++) { items[i] = new CNetworkService(services[i].cmd, services[i].options); services[i].enabled = items[i]->Enabled(); - CMenuOptionChooser * mc = new CMenuOptionChooser(services[i].name.c_str(), &services[i].enabled, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, items[i], CRCInput::convertDigitToKey(shortcut++), ""); + + std::string execute1 = "/bin/" + services[i].cmd; + std::string execute2 = "/sbin/" + services[i].cmd; + + active = false; + if ( !(access(execute1.c_str(), F_OK)) || !(access(execute2.c_str(), F_OK)) ) + active = true; + + if ( (services[i].name == "Telnet") && useinetd) + active = false; + + CMenuOptionChooser * mc = new CMenuOptionChooser(services[i].name.c_str(), &services[i].enabled, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, active, items[i], CRCInput::convertDigitToKey(shortcut), ""); + if (active) + shortcut++; + mc->setHint(services[i].icon, services[i].hint); setup->addItem(mc); } diff --git a/src/gui/osd_setup.cpp b/src/gui/osd_setup.cpp index b338a5cd1..f00c98c38 100644 --- a/src/gui/osd_setup.cpp +++ b/src/gui/osd_setup.cpp @@ -38,7 +38,6 @@ #include "themes.h" #include "screensetup.h" #include "osdlang_setup.h" -#include "themes.h" #include "filebrowser.h" #include @@ -121,22 +120,23 @@ const SNeutrinoSettings::FONT_TYPES gamelist_font_sizes[2] = SNeutrinoSettings::FONT_TYPE_GAMELIST_ITEMSMALL }; -const SNeutrinoSettings::FONT_TYPES other_font_sizes[4] = +const SNeutrinoSettings::FONT_TYPES other_font_sizes[5] = { SNeutrinoSettings::FONT_TYPE_MENU_TITLE, SNeutrinoSettings::FONT_TYPE_MENU, SNeutrinoSettings::FONT_TYPE_MENU_INFO, + SNeutrinoSettings::FONT_TYPE_MENU_HINT, SNeutrinoSettings::FONT_TYPE_FILEBROWSER_ITEM }; font_sizes_groups font_sizes_groups[6] = { - {LOCALE_FONTMENU_MENU , 4, other_font_sizes , "fontsize.doth"}, - {LOCALE_FONTMENU_CHANNELLIST, 4, channellist_font_sizes, "fontsize.dcha"}, - {LOCALE_FONTMENU_EVENTLIST , 4, eventlist_font_sizes , "fontsize.deve"}, - {LOCALE_FONTMENU_EPG , 4, epg_font_sizes , "fontsize.depg"}, - {LOCALE_FONTMENU_INFOBAR , 4, infobar_font_sizes , "fontsize.dinf"}, - {LOCALE_FONTMENU_GAMELIST , 2, gamelist_font_sizes , "fontsize.dgam"} + {LOCALE_FONTMENU_MENU , 5, other_font_sizes , "fontsize.doth", LOCALE_MENU_HINT_MENU_FONTS }, + {LOCALE_FONTMENU_CHANNELLIST, 4, channellist_font_sizes, "fontsize.dcha", LOCALE_MENU_HINT_CHANNELLIST_FONTS }, + {LOCALE_FONTMENU_EVENTLIST , 4, eventlist_font_sizes , "fontsize.deve", LOCALE_MENU_HINT_EVENTLIST_FONTS }, + {LOCALE_FONTMENU_EPG , 4, epg_font_sizes , "fontsize.depg", LOCALE_MENU_HINT_EPG_FONTS }, + {LOCALE_FONTMENU_INFOBAR , 4, infobar_font_sizes , "fontsize.dinf", LOCALE_MENU_HINT_INFOBAR_FONTS }, + {LOCALE_FONTMENU_GAMELIST , 2, gamelist_font_sizes , "fontsize.dgam", LOCALE_MENU_HINT_GAMELIST_FONTS } }; #define FONT_STYLE_REGULAR 0 @@ -166,7 +166,8 @@ font_sizes_struct neutrino_font[FONT_TYPE_COUNT] = {LOCALE_FONTSIZE_INFOBAR_CHANNAME , 30, FONT_STYLE_BOLD , 0}, {LOCALE_FONTSIZE_INFOBAR_INFO , 20, FONT_STYLE_REGULAR, 1}, {LOCALE_FONTSIZE_INFOBAR_SMALL , 14, FONT_STYLE_REGULAR, 1}, - {LOCALE_FONTSIZE_FILEBROWSER_ITEM , 16, FONT_STYLE_BOLD , 1} + {LOCALE_FONTSIZE_FILEBROWSER_ITEM , 16, FONT_STYLE_BOLD , 1}, + {LOCALE_FONTSIZE_MENU_HINT , 16, FONT_STYLE_REGULAR, 0} }; int COsdSetup::exec(CMenuTarget* parent, const std::string &actionKey) @@ -177,13 +178,13 @@ int COsdSetup::exec(CMenuTarget* parent, const std::string &actionKey) if(parent != NULL) parent->hide(); - if(actionKey == "select_font") + if(actionKey == "select_font") { CFileBrowser fileBrowser; CFileFilter fileFilter; fileFilter.addFilter("ttf"); fileBrowser.Filter = &fileFilter; - if (fileBrowser.exec(FONTDIR) == true) + if (fileBrowser.exec(FONTDIR) == true) { strcpy(g_settings.font_file, fileBrowser.getSelectedFile()->Name.c_str()); printf("[neutrino] new font file %s\n", fileBrowser.getSelectedFile()->Name.c_str()); @@ -191,13 +192,13 @@ int COsdSetup::exec(CMenuTarget* parent, const std::string &actionKey) } return menu_return::RETURN_REPAINT; } - else if(actionKey == "ttx_font") + else if(actionKey == "ttx_font") { CFileBrowser fileBrowser; CFileFilter fileFilter; fileFilter.addFilter("ttf"); fileBrowser.Filter = &fileFilter; - if (fileBrowser.exec(FONTDIR) == true) + if (fileBrowser.exec(FONTDIR) == true) { strcpy(g_settings.ttx_font_file, fileBrowser.getSelectedFile()->Name.c_str()); ttx_font_file = fileBrowser.getSelectedFile()->Name; @@ -407,43 +408,99 @@ int COsdSetup::showOsdSetup() //timeouts CMenuWidget osd_menu_timing(LOCALE_MAINMENU_SETTINGS, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_OSDSETUP_TIMEOUT); showOsdTimeoutSetup(&osd_menu_timing); - osd_menu->addItem(new CMenuForwarder(LOCALE_COLORMENU_TIMING, true, NULL, &osd_menu_timing, NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW)); + mf = new CMenuForwarder(LOCALE_COLORMENU_TIMING, true, NULL, &osd_menu_timing, NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); + mf->setHint("", LOCALE_MENU_HINT_TIMEOUTS); + osd_menu->addItem(mf); //screen CScreenSetup screensetup; - osd_menu->addItem(new CMenuForwarder(LOCALE_VIDEOMENU_SCREENSETUP, true, NULL, &screensetup, NULL, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE)); + mf = new CMenuForwarder(LOCALE_VIDEOMENU_SCREENSETUP, true, NULL, &screensetup, NULL, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); + mf->setHint("", LOCALE_MENU_HINT_SCREEN_SETUP); + osd_menu->addItem(mf); //infobar CMenuWidget osd_menu_infobar(LOCALE_MAINMENU_SETTINGS, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_OSDSETUP_INFOBAR); showOsdInfobarSetup(&osd_menu_infobar); - osd_menu->addItem(new CMenuForwarder(LOCALE_MISCSETTINGS_INFOBAR, true, NULL, &osd_menu_infobar, NULL, CRCInput::RC_1)); + mf = new CMenuForwarder(LOCALE_MISCSETTINGS_INFOBAR, true, NULL, &osd_menu_infobar, NULL, CRCInput::RC_1); + mf->setHint("", LOCALE_MENU_HINT_INFOBAR_SETUP); + osd_menu->addItem(mf); //channellist CMenuWidget osd_menu_chanlist(LOCALE_MAINMENU_SETTINGS, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_OSDSETUP_CHANNELLIST); showOsdChanlistSetup(&osd_menu_chanlist); - osd_menu->addItem( new CMenuForwarder(LOCALE_MISCSETTINGS_CHANNELLIST, true, NULL, &osd_menu_chanlist, NULL, CRCInput::RC_2)); + mf = new CMenuForwarder(LOCALE_MISCSETTINGS_CHANNELLIST, true, NULL, &osd_menu_chanlist, NULL, CRCInput::RC_2); + mf->setHint("", LOCALE_MENU_HINT_CHANNELLIST_SETUP); + osd_menu->addItem(mf); //screenshot CMenuWidget osd_menu_screenshot(LOCALE_MAINMENU_SETTINGS, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_OSDSETUP_SCREENSHOT); showOsdScreenshottSetup(&osd_menu_screenshot); - osd_menu->addItem( new CMenuForwarder(LOCALE_SCREENSHOT_MENU, true, NULL, &osd_menu_screenshot, NULL, CRCInput::RC_3)); + mf = new CMenuForwarder(LOCALE_SCREENSHOT_MENU, true, NULL, &osd_menu_screenshot, NULL, CRCInput::RC_3); + mf->setHint("", LOCALE_MENU_HINT_SCREENSHOT_SETUP); + osd_menu->addItem(mf); //monitor - osd_menu->addItem(new CMenuOptionChooser(LOCALE_COLORMENU_OSD_PRESET, &g_settings.screen_preset, OSD_PRESET_OPTIONS, OSD_PRESET_OPTIONS_COUNT, true, this)); + CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_COLORMENU_OSD_PRESET, &g_settings.screen_preset, OSD_PRESET_OPTIONS, OSD_PRESET_OPTIONS_COUNT, true, this); + mc->setHint("", LOCALE_MENU_HINT_OSD_PRESET); + osd_menu->addItem(mc); osd_menu->addItem(GenericMenuSeparatorLine); - //options - osd_menu->addItem(new CMenuOptionChooser(LOCALE_EXTRA_ROUNDED_CORNERS, &g_settings.rounded_corners, MENU_CORNERSETTINGS_TYPE_OPTIONS, MENU_CORNERSETTINGS_TYPE_OPTION_COUNT, true, this)); - osd_menu->addItem(new CMenuOptionChooser(LOCALE_EXTRA_SCRAMBLED_MESSAGE, &g_settings.scrambled_message, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); - osd_menu->addItem(new CMenuOptionChooser(LOCALE_INFOVIEWER_SUBCHAN_DISP_POS, &g_settings.infobar_subchan_disp_pos, INFOBAR_SUBCHAN_DISP_POS_OPTIONS, INFOBAR_SUBCHAN_DISP_POS_OPTIONS_COUNT, true)); - osd_menu->addItem(new CMenuOptionChooser(LOCALE_EXTRA_VOLUME_POS, &g_settings.volume_pos, VOLUMEBAR_DISP_POS_OPTIONS, VOLUMEBAR_DISP_POS_OPTIONS_COUNT, true, this)); - osd_menu->addItem(new CMenuOptionChooser(LOCALE_EXTRA_SHOW_MUTE_ICON, &g_settings.show_mute_icon, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); - osd_menu->addItem(new CMenuOptionChooser(LOCALE_SETTINGS_MENU_POS, &g_settings.menu_pos, MENU_DISP_POS_OPTIONS, MENU_DISP_POS_OPTIONS_COUNT, true, this)); + // corners + int rounded_corners = g_settings.rounded_corners; + mc = new CMenuOptionChooser(LOCALE_EXTRA_ROUNDED_CORNERS, &rounded_corners, MENU_CORNERSETTINGS_TYPE_OPTIONS, MENU_CORNERSETTINGS_TYPE_OPTION_COUNT, true, this); + mc->setHint("", LOCALE_MENU_HINT_ROUNDED_CORNERS); + osd_menu->addItem(mc); + + // scrambled + mc = new CMenuOptionChooser(LOCALE_EXTRA_SCRAMBLED_MESSAGE, &g_settings.scrambled_message, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_SCRAMBLED_MESSAGE); + osd_menu->addItem(mc); + + // subchannel menu position + mc = new CMenuOptionChooser(LOCALE_INFOVIEWER_SUBCHAN_DISP_POS, &g_settings.infobar_subchan_disp_pos, INFOBAR_SUBCHAN_DISP_POS_OPTIONS, INFOBAR_SUBCHAN_DISP_POS_OPTIONS_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_SUBCHANNEL_POS); + osd_menu->addItem(mc); + + // volume position + mc = new CMenuOptionChooser(LOCALE_EXTRA_VOLUME_POS, &g_settings.volume_pos, VOLUMEBAR_DISP_POS_OPTIONS, VOLUMEBAR_DISP_POS_OPTIONS_COUNT, true, this); + mc->setHint("", LOCALE_MENU_HINT_VOLUME_POS); + osd_menu->addItem(mc); + + // volume digits + mc = new CMenuOptionChooser(LOCALE_EXTRA_VOLUME_DIGITS, &g_settings.volume_digits, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this); + mc->setHint("", LOCALE_MENU_HINT_VOLUME_DIGITS); + osd_menu->addItem(mc); + + // show mute at volume 0 + mc = new CMenuOptionChooser(LOCALE_EXTRA_SHOW_MUTE_ICON, &g_settings.show_mute_icon, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_SHOW_MUTE_ICON); + osd_menu->addItem(mc); + + // menu position + mc = new CMenuOptionChooser(LOCALE_SETTINGS_MENU_POS, &g_settings.menu_pos, MENU_DISP_POS_OPTIONS, MENU_DISP_POS_OPTIONS_COUNT, true, this); + mc->setHint("", LOCALE_MENU_HINT_MENU_POS); + osd_menu->addItem(mc); + + // menu hints int show_hints = g_settings.show_menu_hints; - osd_menu->addItem(new CMenuOptionChooser(LOCALE_SETTINGS_MENU_HINTS, &show_hints, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this)); - osd_menu->addItem(new CMenuOptionChooser(LOCALE_COLORMENU_FADE, &g_settings.widget_fade, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true )); - osd_menu->addItem(new CMenuOptionChooser(LOCALE_EXTRA_BIGWINDOWS, &g_settings.big_windows, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); - osd_menu->addItem(new CMenuOptionChooser(LOCALE_PROGRESSBAR_COLOR, &g_settings.progressbar_color, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); + mc = new CMenuOptionChooser(LOCALE_SETTINGS_MENU_HINTS, &show_hints, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this); + mc->setHint("", LOCALE_MENU_HINT_MENU_HINTS); + osd_menu->addItem(mc); + + // fade windows + mc = new CMenuOptionChooser(LOCALE_COLORMENU_FADE, &g_settings.widget_fade, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true ); + mc->setHint("", LOCALE_MENU_HINT_FADE); + osd_menu->addItem(mc); + + // big windows + mc = new CMenuOptionChooser(LOCALE_EXTRA_BIGWINDOWS, &g_settings.big_windows, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_BIGWINDOWS); + osd_menu->addItem(mc); + + // color progress bar + mc = new CMenuOptionChooser(LOCALE_PROGRESSBAR_COLOR, &g_settings.progressbar_color, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_PROGRESSBAR_COLOR); + osd_menu->addItem(mc); int res = osd_menu->exec(NULL, ""); @@ -480,7 +537,7 @@ void COsdSetup::showOsdMenueColorSetup(CMenuWidget *menu_colors) menu_colors->addItem( new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_COLORMENUSETUP_MENUHEAD)); mf = new CMenuDForwarder(LOCALE_COLORMENU_BACKGROUND, true, NULL, chHeadcolor ); - mf->setHint("", LOCALE_MENU_HINT_HEAD_BACKGROUND); + mf->setHint("", LOCALE_MENU_HINT_HEAD_BACK); menu_colors->addItem(mf); mf = new CMenuDForwarder(LOCALE_COLORMENU_TEXTCOLOR, true, NULL, chHeadTextcolor ); @@ -489,7 +546,7 @@ void COsdSetup::showOsdMenueColorSetup(CMenuWidget *menu_colors) menu_colors->addItem( new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_COLORMENUSETUP_MENUCONTENT)); mf = new CMenuDForwarder(LOCALE_COLORMENU_BACKGROUND, true, NULL, chContentcolor ); - mf->setHint("", LOCALE_MENU_HINT_CONTENT_BACKGROUND); + mf->setHint("", LOCALE_MENU_HINT_CONTENT_BACK); menu_colors->addItem(mf); mf = new CMenuDForwarder(LOCALE_COLORMENU_TEXTCOLOR, true, NULL, chContentTextcolor ); @@ -498,7 +555,7 @@ void COsdSetup::showOsdMenueColorSetup(CMenuWidget *menu_colors) menu_colors->addItem( new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_COLORMENUSETUP_MENUCONTENT_INACTIVE)); mf = new CMenuDForwarder(LOCALE_COLORMENU_BACKGROUND, true, NULL, chContentInactivecolor ); - mf->setHint("", LOCALE_MENU_HINT_INACTIVE_BACKGROUND); + mf->setHint("", LOCALE_MENU_HINT_INACTIVE_BACK); menu_colors->addItem(mf); mf = new CMenuDForwarder(LOCALE_COLORMENU_TEXTCOLOR, true, NULL, chContentInactiveTextcolor); @@ -507,21 +564,21 @@ void COsdSetup::showOsdMenueColorSetup(CMenuWidget *menu_colors) menu_colors->addItem( new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_COLORMENUSETUP_MENUCONTENT_SELECTED)); mf = new CMenuDForwarder(LOCALE_COLORMENU_BACKGROUND, true, NULL, chContentSelectedcolor ); - mf->setHint("", LOCALE_MENU_HINT_SELECTED_BACKGROUND); + mf->setHint("", LOCALE_MENU_HINT_SELECTED_BACK); menu_colors->addItem(mf); mf = new CMenuDForwarder(LOCALE_COLORMENU_TEXTCOLOR, true, NULL, chContentSelectedTextcolor ); - mf->setHint("", LOCALE_MENU_HINT_SELECTED_TEXTCOLOR); + mf->setHint("", LOCALE_MENU_HINT_SELECTED_TEXT); menu_colors->addItem(mf); - CColorChooser* chInfobarcolor = new CColorChooser(LOCALE_COLORMENU_BACKGROUND, &g_settings.infobar_red, + CColorChooser* chInfobarcolor = new CColorChooser(LOCALE_COLORMENU_BACKGROUND, &g_settings.infobar_red, &g_settings.infobar_green, &g_settings.infobar_blue, &g_settings.infobar_alpha, colorSetupNotifier); - CColorChooser* chInfobarTextcolor = new CColorChooser(LOCALE_COLORMENU_TEXTCOLOR, &g_settings.infobar_Text_red, + CColorChooser* chInfobarTextcolor = new CColorChooser(LOCALE_COLORMENU_TEXTCOLOR, &g_settings.infobar_Text_red, &g_settings.infobar_Text_green, &g_settings.infobar_Text_blue, NULL, colorSetupNotifier); menu_colors->addItem( new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_COLORSTATUSBAR_TEXT)); mf = new CMenuDForwarder(LOCALE_COLORMENU_BACKGROUND, true, NULL, chInfobarcolor ); - mf->setHint("", LOCALE_MENU_HINT_INFOBAR_BACKGROUND); + mf->setHint("", LOCALE_MENU_HINT_INFOBAR_BACK); menu_colors->addItem(mf); mf = new CMenuDForwarder(LOCALE_COLORMENU_TEXTCOLOR, true, NULL, chInfobarTextcolor ); @@ -586,19 +643,34 @@ void COsdSetup::AddFontSettingItem(CMenuWidget &font_Settings, const SNeutrinoSe void COsdSetup::showOsdFontSizeSetup(CMenuWidget *menu_fonts) { CMenuWidget *fontSettings = menu_fonts; + CMenuForwarder * mf; fontSettings->addIntroItems(LOCALE_FONTMENU_HEAD); - fontSettings->addItem( new CMenuForwarder(LOCALE_COLORMENU_FONT, true, NULL, this, "select_font", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED)); - fontSettings->addItem( new CMenuForwarder(LOCALE_COLORMENU_FONT_TTX, true, NULL, this, "ttx_font", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN)); - fontSettings->addItem( new CMenuOptionChooser(LOCALE_COLORMENU_CONTRAST_FONTS, &g_settings.contrast_fonts, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW)); + // select gui font file + mf = new CMenuForwarder(LOCALE_COLORMENU_FONT, true, NULL, this, "select_font", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); + mf->setHint("", LOCALE_MENU_HINT_FONT_GUI); + fontSettings->addItem(mf); + + // select teletext font file + mf = new CMenuForwarder(LOCALE_COLORMENU_FONT_TTX, true, NULL, this, "ttx_font", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf->setHint("", LOCALE_MENU_HINT_FONT_TTX); + fontSettings->addItem(mf); + + // contrast fonts + CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_COLORMENU_CONTRAST_FONTS, &g_settings.contrast_fonts, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); + mc->setHint("", LOCALE_MENU_HINT_CONTRAST_FONTS); + fontSettings->addItem(mc); fontSettings->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_FONTMENU_SIZES)); //submenu font scaling - fontSettings->addItem(new CMenuForwarder(LOCALE_FONTMENU_SCALING, true, NULL, this, "font_scaling", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE)); + mf = new CMenuForwarder(LOCALE_FONTMENU_SCALING, true, NULL, this, "font_scaling", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); + mf->setHint("", LOCALE_MENU_HINT_FONT_SCALING); + fontSettings->addItem(mf); + //fontSettings->addItem( new CMenuForwarder(LOCALE_EPGPLUS_SELECT_FONT_NAME, true, NULL, this, "select_font")); - + mn_widget_id_t w_index = MN_WIDGET_ID_OSDSETUP_FONTSIZE_MENU; for (int i = 0; i < 6; i++) { @@ -613,7 +685,9 @@ void COsdSetup::showOsdFontSizeSetup(CMenuWidget *menu_fonts) fontSettingsSubMenu->addItem(GenericMenuSeparatorLine); fontSettingsSubMenu->addItem(new CMenuForwarder(LOCALE_OPTIONS_DEFAULT, true, NULL, this, font_sizes_groups[i].actionkey)); - fontSettings->addItem(new CMenuDForwarder(font_sizes_groups[i].groupname, true, NULL, fontSettingsSubMenu, "", CRCInput::convertDigitToKey(i+1))); + mf = new CMenuDForwarder(font_sizes_groups[i].groupname, true, NULL, fontSettingsSubMenu, "", CRCInput::convertDigitToKey(i+1)); + mf->setHint("", font_sizes_groups[i].hint); + fontSettings->addItem(mf); w_index++; } } @@ -650,28 +724,89 @@ void COsdSetup::showOsdInfobarSetup(CMenuWidget *menu_infobar) { menu_infobar->addIntroItems(LOCALE_MISCSETTINGS_INFOBAR); - menu_infobar->addItem(new CMenuOptionChooser(LOCALE_MISCSETTINGS_INFOBAR_CASYSTEM_DISPLAY, &g_settings.casystem_display, INFOBAR_CASYSTEM_MODE_OPTIONS, INFOBAR_CASYSTEM_MODE_OPTION_COUNT, true, this)); - menu_infobar->addItem(new CMenuOptionChooser(LOCALE_MISCSETTINGS_INFOBAR_DISP_LOG, &g_settings.infobar_show_channellogo, LOCALE_MISCSETTINGS_INFOBAR_DISP_OPTIONS, LOCALE_MISCSETTINGS_INFOBAR_DISP_OPTIONS_COUNT, true)); - menu_infobar->addItem(new CMenuForwarder(LOCALE_MISCSETTINGS_INFOBAR_LOGO_HDD_DIR, true, g_settings.logo_hdd_dir, this, "logo_dir")); - menu_infobar->addItem(new CMenuOptionChooser(LOCALE_MISCSETTINGS_INFOBAR_SAT_DISPLAY, &g_settings.infobar_sat_display, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); - menu_infobar->addItem(new CMenuOptionChooser(LOCALE_MISCSETTINGS_INFOBAR_SHOW_SYSFS_HDD, &g_settings.infobar_show_sysfs_hdd, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); - menu_infobar->addItem(new CMenuOptionChooser(LOCALE_MISCSETTINGS_INFOBAR_SHOW_RES, &g_settings.infobar_show_res, INFOBAR_SHOW_RES_MODE_OPTIONS, INFOBAR_SHOW_RES_MODE_OPTION_COUNT, true)); - menu_infobar->addItem(new CMenuOptionChooser(LOCALE_MISCSETTINGS_INFOBAR_SHOW_DD_AVAILABLE, &g_settings.infobar_show_dd_available, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); - menu_infobar->addItem(new CMenuOptionChooser(LOCALE_MISCSETTINGS_INFOBAR_SHOW_TUNER, &g_settings.infobar_show_tuner, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); - menu_infobar->addItem(new CMenuOptionChooser(LOCALE_MISCSETTINGS_INFOBAR_SHOW, &g_settings.infobar_show, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); - menu_infobar->addItem(new CMenuOptionChooser(LOCALE_MISCSETTINGS_INFOBAR_COLORED_EVENTS, &g_settings.colored_events_infobar, OPTIONS_COLORED_EVENTS_OPTIONS, OPTIONS_COLORED_EVENTS_OPTION_COUNT, true)); - menu_infobar->addItem(new CMenuOptionChooser(LOCALE_MISCSETTINGS_RADIOTEXT, &g_settings.radiotext_enable, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this)); + CMenuOptionChooser * mc; + + // CA system + mc = new CMenuOptionChooser(LOCALE_MISCSETTINGS_INFOBAR_CASYSTEM_DISPLAY, &g_settings.casystem_display, INFOBAR_CASYSTEM_MODE_OPTIONS, INFOBAR_CASYSTEM_MODE_OPTION_COUNT, true, this); + mc->setHint("", LOCALE_MENU_HINT_INFOBAR_CASYS); + menu_infobar->addItem(mc); + + // logo + mc = new CMenuOptionChooser(LOCALE_MISCSETTINGS_INFOBAR_DISP_LOG, &g_settings.infobar_show_channellogo, LOCALE_MISCSETTINGS_INFOBAR_DISP_OPTIONS, LOCALE_MISCSETTINGS_INFOBAR_DISP_OPTIONS_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_INFOBAR_LOGO); + menu_infobar->addItem(mc); + + // logo directory + CMenuForwarder * mf = new CMenuForwarder(LOCALE_MISCSETTINGS_INFOBAR_LOGO_HDD_DIR, true, g_settings.logo_hdd_dir, this, "logo_dir"); + mf->setHint("", LOCALE_MENU_HINT_INFOBAR_LOGO_DIR); + menu_infobar->addItem(mf); + + // satellite + mc = new CMenuOptionChooser(LOCALE_MISCSETTINGS_INFOBAR_SAT_DISPLAY, &g_settings.infobar_sat_display, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_INFOBAR_SAT); + menu_infobar->addItem(mc); + + // flash/hdd progress + mc = new CMenuOptionChooser(LOCALE_MISCSETTINGS_INFOBAR_SHOW_SYSFS_HDD, &g_settings.infobar_show_sysfs_hdd, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_INFOBAR_FILESYS); + menu_infobar->addItem(mc); + + // resolution + mc = new CMenuOptionChooser(LOCALE_MISCSETTINGS_INFOBAR_SHOW_RES, &g_settings.infobar_show_res, INFOBAR_SHOW_RES_MODE_OPTIONS, INFOBAR_SHOW_RES_MODE_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_INFOBAR_RES); + menu_infobar->addItem(mc); + + // DD icon + mc = new CMenuOptionChooser(LOCALE_MISCSETTINGS_INFOBAR_SHOW_DD_AVAILABLE, &g_settings.infobar_show_dd_available, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_INFOBAR_DD); + menu_infobar->addItem(mc); + + // tuner icon + mc = new CMenuOptionChooser(LOCALE_MISCSETTINGS_INFOBAR_SHOW_TUNER, &g_settings.infobar_show_tuner, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_INFOBAR_TUNER); + menu_infobar->addItem(mc); + + // show on epg change + mc = new CMenuOptionChooser(LOCALE_MISCSETTINGS_INFOBAR_SHOW, &g_settings.infobar_show, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_INFOBAR_ON_EPG); + menu_infobar->addItem(mc); + + // colored event + mc = new CMenuOptionChooser(LOCALE_MISCSETTINGS_INFOBAR_COLORED_EVENTS, &g_settings.colored_events_infobar, OPTIONS_COLORED_EVENTS_OPTIONS, OPTIONS_COLORED_EVENTS_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_INFOBAR_COLORED_EVENT); + menu_infobar->addItem(mc); + + // radiotext + mc = new CMenuOptionChooser(LOCALE_MISCSETTINGS_RADIOTEXT, &g_settings.radiotext_enable, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this); + mc->setHint("", LOCALE_MENU_HINT_INFOBAR_RADIOTEXT); + menu_infobar->addItem(mc); } //channellist void COsdSetup::showOsdChanlistSetup(CMenuWidget *menu_chanlist) { - menu_chanlist->addIntroItems(LOCALE_MISCSETTINGS_CHANNELLIST); + CMenuOptionChooser * mc; - menu_chanlist->addItem(new CMenuOptionChooser(LOCALE_MISCSETTINGS_CHANNELLIST_EPGTEXT_ALIGN, &g_settings.channellist_epgtext_align_right, CHANNELLIST_EPGTEXT_ALIGN_RIGHT_OPTIONS, CHANNELLIST_EPGTEXT_ALIGN_RIGHT_OPTIONS_COUNT, true)); - menu_chanlist->addItem(new CMenuOptionChooser(LOCALE_CHANNELLIST_EXTENDED, &g_settings.channellist_extended, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); - menu_chanlist->addItem(new CMenuOptionChooser(LOCALE_CHANNELLIST_FOOT, &g_settings.channellist_foot, CHANNELLIST_FOOT_OPTIONS, CHANNELLIST_FOOT_OPTIONS_COUNT, true)); - menu_chanlist->addItem(new CMenuOptionChooser(LOCALE_MISCSETTINGS_CHANNELLIST_COLORED_EVENTS, &g_settings.colored_events_channellist, OPTIONS_COLORED_EVENTS_OPTIONS, OPTIONS_COLORED_EVENTS_OPTION_COUNT, true)); + menu_chanlist->addIntroItems(LOCALE_MISCSETTINGS_CHANNELLIST); + // epg align + mc = new CMenuOptionChooser(LOCALE_MISCSETTINGS_CHANNELLIST_EPGTEXT_ALIGN, &g_settings.channellist_epgtext_align_right, CHANNELLIST_EPGTEXT_ALIGN_RIGHT_OPTIONS, CHANNELLIST_EPGTEXT_ALIGN_RIGHT_OPTIONS_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_CHANNELLIST_EPG_ALIGN); + menu_chanlist->addItem(mc); + + // extended channel list + mc = new CMenuOptionChooser(LOCALE_CHANNELLIST_EXTENDED, &g_settings.channellist_extended, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_CHANNELLIST_EXTENDED); + menu_chanlist->addItem(mc); + + // foot + mc = new CMenuOptionChooser(LOCALE_CHANNELLIST_FOOT, &g_settings.channellist_foot, CHANNELLIST_FOOT_OPTIONS, CHANNELLIST_FOOT_OPTIONS_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_CHANNELLIST_FOOT); + menu_chanlist->addItem(mc); + + // colored event + mc = new CMenuOptionChooser(LOCALE_MISCSETTINGS_CHANNELLIST_COLORED_EVENTS, &g_settings.colored_events_channellist, OPTIONS_COLORED_EVENTS_OPTIONS, OPTIONS_COLORED_EVENTS_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_CHANNELLIST_COLORED); + menu_chanlist->addItem(mc); } bool COsdSetup::changeNotify(const neutrino_locale_t OptionName, void * data) @@ -710,7 +845,13 @@ bool COsdSetup::changeNotify(const neutrino_locale_t OptionName, void * data) return true; } else if ((ARE_LOCALES_EQUAL(OptionName, LOCALE_EXTRA_VOLUME_POS)) || - (ARE_LOCALES_EQUAL(OptionName, LOCALE_EXTRA_ROUNDED_CORNERS))) { + (ARE_LOCALES_EQUAL(OptionName, LOCALE_EXTRA_VOLUME_DIGITS))){ + CVolume::getInstance()->Init(); + return false; + } + else if (ARE_LOCALES_EQUAL(OptionName, LOCALE_EXTRA_ROUNDED_CORNERS)) { + osd_menu->hide(); + g_settings.rounded_corners = * (int*) data; CVolume::getInstance()->Init(); return true; } @@ -736,24 +877,22 @@ int COsdSetup::showContextChanlistMenu() CMenuWidget * menu_chanlist = new CMenuWidget(LOCALE_MAINMENU_SETTINGS, NEUTRINO_ICON_SETTINGS, width); menu_chanlist->enableSaveScreen(true); + menu_chanlist->enableFade(false); menu_chanlist->setSelected(cselected); - menu_chanlist->addIntroItems(LOCALE_MISCSETTINGS_CHANNELLIST); + menu_chanlist->addIntroItems(LOCALE_MISCSETTINGS_CHANNELLIST, NONEXISTANT_LOCALE, CMenuWidget::BTN_TYPE_CANCEL); menu_chanlist->addItem(new CMenuOptionChooser(LOCALE_MISCSETTINGS_CHANNELLIST_EPGTEXT_ALIGN, &g_settings.channellist_epgtext_align_right, CHANNELLIST_EPGTEXT_ALIGN_RIGHT_OPTIONS, CHANNELLIST_EPGTEXT_ALIGN_RIGHT_OPTIONS_COUNT, true)); menu_chanlist->addItem(new CMenuOptionChooser(LOCALE_CHANNELLIST_EXTENDED, &g_settings.channellist_extended, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); menu_chanlist->addItem(new CMenuOptionChooser(LOCALE_CHANNELLIST_FOOT, &g_settings.channellist_foot, CHANNELLIST_FOOT_OPTIONS, CHANNELLIST_FOOT_OPTIONS_COUNT, true)); menu_chanlist->addItem(new CMenuOptionChooser(LOCALE_MISCSETTINGS_CHANNELLIST_COLORED_EVENTS, &g_settings.colored_events_channellist, OPTIONS_COLORED_EVENTS_OPTIONS, OPTIONS_COLORED_EVENTS_OPTION_COUNT, true)); - /* TODO ? problems: - * 1. channel list not re-calc sizes after menu; - * 2. font menu smaller and make hole in channel list */ -#if 1 CMenuWidget *fontSettingsSubMenu = new CMenuWidget(LOCALE_FONTMENU_HEAD, NEUTRINO_ICON_KEYBINDING); fontSettingsSubMenu->enableSaveScreen(true); + fontSettingsSubMenu->enableFade(false); int i = 1; - fontSettingsSubMenu->addIntroItems(font_sizes_groups[i].groupname); + fontSettingsSubMenu->addIntroItems(font_sizes_groups[i].groupname, NONEXISTANT_LOCALE, CMenuWidget::BTN_TYPE_CANCEL); for (unsigned int j = 0; j < font_sizes_groups[i].count; j++) { @@ -762,7 +901,6 @@ int COsdSetup::showContextChanlistMenu() fontSettingsSubMenu->addItem(GenericMenuSeparatorLine); fontSettingsSubMenu->addItem(new CMenuForwarder(LOCALE_OPTIONS_DEFAULT, true, NULL, this, font_sizes_groups[i].actionkey)); menu_chanlist->addItem(new CMenuDForwarder(LOCALE_FONTMENU_HEAD, true, NULL, fontSettingsSubMenu, "", CRCInput::convertDigitToKey(0))); -#endif int res = menu_chanlist->exec(NULL, ""); cselected = menu_chanlist->getSelected(); @@ -790,13 +928,32 @@ void COsdSetup::showOsdScreenshottSetup(CMenuWidget *menu_screenshot) menu_screenshot->addIntroItems(LOCALE_SCREENSHOT_MENU); if((uint)g_settings.key_screenshot == CRCInput::RC_nokey) menu_screenshot->addItem( new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SCREENSHOT_INFO)); - menu_screenshot->addItem(new CMenuOptionNumberChooser(LOCALE_SCREENSHOT_COUNT, &g_settings.screenshot_count, true, 1, 5, NULL)); - menu_screenshot->addItem(new CMenuOptionChooser(LOCALE_SCREENSHOT_FORMAT, &g_settings.screenshot_format, SCREENSHOT_FMT_OPTIONS, SCREENSHOT_FMT_OPTION_COUNT, true)); - menu_screenshot->addItem(new CMenuForwarder(LOCALE_SCREENSHOT_DEFDIR, true, g_settings.screenshot_dir, this, "screenshot_dir")); - menu_screenshot->addItem(new CMenuOptionChooser(LOCALE_SCREENSHOT_RES, &g_settings.screenshot_mode, SCREENSHOT_OPTIONS, SCREENSHOT_OPTION_COUNT, true)); - menu_screenshot->addItem(new CMenuOptionChooser(LOCALE_SCREENSHOT_VIDEO, &g_settings.screenshot_video, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); - menu_screenshot->addItem(new CMenuOptionChooser(LOCALE_SCREENSHOT_SCALE, &g_settings.screenshot_scale, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); - menu_screenshot->addItem(new CMenuOptionChooser(LOCALE_SCREENSHOT_COVER, &g_settings.screenshot_cover, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); + CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_SCREENSHOT_COUNT, &g_settings.screenshot_count, true, 1, 5, NULL); + nc->setHint("", LOCALE_MENU_HINT_SCREENSHOT_COUNT); + menu_screenshot->addItem(nc); + CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_SCREENSHOT_FORMAT, &g_settings.screenshot_format, SCREENSHOT_FMT_OPTIONS, SCREENSHOT_FMT_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_SCREENSHOT_FORMAT); + menu_screenshot->addItem(mc); + + CMenuForwarder * mf = new CMenuForwarder(LOCALE_SCREENSHOT_DEFDIR, true, g_settings.screenshot_dir, this, "screenshot_dir"); + mf->setHint("", LOCALE_MENU_HINT_SCREENSHOT_DIR); + menu_screenshot->addItem(mf); + + mc = new CMenuOptionChooser(LOCALE_SCREENSHOT_RES, &g_settings.screenshot_mode, SCREENSHOT_OPTIONS, SCREENSHOT_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_SCREENSHOT_RES); + menu_screenshot->addItem(mc); + + mc = new CMenuOptionChooser(LOCALE_SCREENSHOT_VIDEO, &g_settings.screenshot_video, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_SCREENSHOT_VIDEO); + menu_screenshot->addItem(mc); + + mc = new CMenuOptionChooser(LOCALE_SCREENSHOT_SCALE, &g_settings.screenshot_scale, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_SCREENSHOT_SCALE); + menu_screenshot->addItem(mc); + + mc = new CMenuOptionChooser(LOCALE_SCREENSHOT_COVER, &g_settings.screenshot_cover, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_SCREENSHOT_COVER); + menu_screenshot->addItem(mc); } diff --git a/src/gui/parentallock_setup.cpp b/src/gui/parentallock_setup.cpp index 9d07acf78..8a7d867a1 100644 --- a/src/gui/parentallock_setup.cpp +++ b/src/gui/parentallock_setup.cpp @@ -23,8 +23,9 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with this program; if not, write to the + Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. */ diff --git a/src/gui/parentallock_setup.h b/src/gui/parentallock_setup.h index b2043f863..fde2310ed 100644 --- a/src/gui/parentallock_setup.h +++ b/src/gui/parentallock_setup.h @@ -23,8 +23,9 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with this program; if not, write to the + Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. */ diff --git a/src/gui/personalize.cpp b/src/gui/personalize.cpp index b0a9e3729..2b089178a 100644 --- a/src/gui/personalize.cpp +++ b/src/gui/personalize.cpp @@ -577,7 +577,7 @@ bool CPersonalizeGui::changeNotify(const neutrino_locale_t locale, void *data) } } } - return true; + return false; } //shows a short help message @@ -912,7 +912,7 @@ bool CUserMenuNotifier::changeNotify(const neutrino_locale_t, void *) toDisable[0]->setActive(g_settings.personalize[SNeutrinoSettings::P_MAIN_RED_BUTTON]); toDisable[1]->setActive(g_settings.personalize[SNeutrinoSettings::P_MAIN_BLUE_BUTTON]); - return true; + return false; } //helper class to enable/disable pin setup diff --git a/src/gui/pictureviewer_setup.cpp b/src/gui/pictureviewer_setup.cpp index 63c68856c..601638c6b 100644 --- a/src/gui/pictureviewer_setup.cpp +++ b/src/gui/pictureviewer_setup.cpp @@ -33,7 +33,6 @@ #include #endif - #include "gui/pictureviewer_setup.h" #include @@ -82,11 +81,10 @@ int CPictureViewerSetup::exec(CMenuTarget* parent, const std::string &actionKey) } res = showPictureViewerSetup(); - + return res; } - #define PICTUREVIEWER_SCALING_OPTION_COUNT 3 const CMenuOptionChooser::keyval PICTUREVIEWER_SCALING_OPTIONS[PICTUREVIEWER_SCALING_OPTION_COUNT] = { @@ -95,21 +93,27 @@ const CMenuOptionChooser::keyval PICTUREVIEWER_SCALING_OPTIONS[PICTUREVIEWER_SCA { CPictureViewer::NONE , LOCALE_PICTUREVIEWER_RESIZE_NONE } }; - /*shows the picviewer setup menue*/ int CPictureViewerSetup::showPictureViewerSetup() { - CMenuWidget* picviewsetup = new CMenuWidget(LOCALE_MAINMENU_SETTINGS, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_PVIEWERSETUP); // intros: back ande save picviewsetup->addIntroItems(LOCALE_PICTUREVIEWER_HEAD); - picviewsetup->addItem(new CMenuOptionChooser(LOCALE_PICTUREVIEWER_SCALING , &g_settings.picviewer_scaling , PICTUREVIEWER_SCALING_OPTIONS , PICTUREVIEWER_SCALING_OPTION_COUNT , true )); + CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_PICTUREVIEWER_SCALING, &g_settings.picviewer_scaling, PICTUREVIEWER_SCALING_OPTIONS, PICTUREVIEWER_SCALING_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_PICTUREVIEWER_SCALING); + picviewsetup->addItem(mc); + CStringInput pic_timeout(LOCALE_PICTUREVIEWER_SLIDE_TIME, g_settings.picviewer_slide_time, 2, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789 "); - picviewsetup->addItem(new CMenuForwarder(LOCALE_PICTUREVIEWER_SLIDE_TIME, true, g_settings.picviewer_slide_time, &pic_timeout)); - picviewsetup->addItem(new CMenuForwarder(LOCALE_PICTUREVIEWER_DEFDIR, true, g_settings.network_nfs_picturedir, this, "picturedir")); - + CMenuForwarder * mf = new CMenuForwarder(LOCALE_PICTUREVIEWER_SLIDE_TIME, true, g_settings.picviewer_slide_time, &pic_timeout); + mf->setHint("", LOCALE_MENU_HINT_PICTUREVIEWER_SLIDE_TIME); + picviewsetup->addItem(mf); + + mf = new CMenuForwarder(LOCALE_PICTUREVIEWER_DEFDIR, true, g_settings.network_nfs_picturedir, this, "picturedir"); + mf->setHint("", LOCALE_MENU_HINT_PICTUREVIEWER_DEFDIR); + picviewsetup->addItem(mf); + int res = picviewsetup->exec(NULL, ""); delete picviewsetup; return res; diff --git a/src/gui/plugins.cpp b/src/gui/plugins.cpp index 13ec9c526..de8b7fbb0 100644 --- a/src/gui/plugins.cpp +++ b/src/gui/plugins.cpp @@ -345,7 +345,7 @@ void CPlugins::startScriptPlugin(int number) } } -int mysystem(char * cmd, char * arg1, char * arg2); +int mysystem(const char * cmd,const char * arg1,const char * arg2); void CPlugins::startPlugin(int number,int /*param*/) { // always delete old output @@ -592,7 +592,7 @@ void CPlugins::startPlugin(int number,int /*param*/) g_RCInput->stopInput(); //frameBuffer->setMode(720, 576, 8 * sizeof(fb_pixel_t)); printf("Starting %s\n", plugin_list[number].pluginfile.c_str()); - mysystem((char *) plugin_list[number].pluginfile.c_str(), NULL, NULL); + mysystem(plugin_list[number].pluginfile.c_str(), NULL, NULL); //frameBuffer->setMode(720, 576, 8 * sizeof(fb_pixel_t)); frameBuffer->paintBackground(); g_RCInput->restartInput(); diff --git a/src/gui/scan.cpp b/src/gui/scan.cpp index 87fd2009c..75324cfd1 100644 --- a/src/gui/scan.cpp +++ b/src/gui/scan.cpp @@ -159,6 +159,8 @@ int CScanTs::exec(CMenuTarget* /*parent*/, const std::string & actionKey) scan_flags |= CServiceScan::SCAN_RESET_NUMBERS; if(scansettings.scan_logical_numbers) scan_flags |= CServiceScan::SCAN_LOGICAL_NUMBERS; + if(scansettings.scan_logical_hd) + scan_flags |= CServiceScan::SCAN_LOGICAL_HD; /* channel types to scan, TV/RADIO/ALL */ scan_flags |= scansettings.scanType; @@ -230,14 +232,14 @@ int CScanTs::exec(CMenuTarget* /*parent*/, const std::string & actionKey) } else if(manual || !scan_all) { sat.position = CServiceManager::getInstance()->GetSatellitePosition(scansettings.satNameNoDiseqc); - strncpy(sat.satName, scansettings.satNameNoDiseqc, 50); + strncpy(sat.satName, scansettings.satNameNoDiseqc, 49); satList.push_back(sat); } else { satellite_map_t & satmap = CServiceManager::getInstance()->SatelliteList(); for(sit = satmap.begin(); sit != satmap.end(); ++sit) { if(sit->second.use_in_scan) { sat.position = sit->first; - strncpy(sat.satName, sit->second.name.c_str(), 50); + strncpy(sat.satName, sit->second.name.c_str(), 49); satList.push_back(sat); } } diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index af4099903..e92b3211e 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -45,7 +45,6 @@ #include "gui/widget/hintbox.h" #include "gui/widget/stringinput.h" -#include "gui/widget/stringinput_ext.h" #include #include @@ -221,6 +220,7 @@ CScanSetup::CScanSetup(bool wizard_mode) satSelect = NULL; frontendSetup = NULL; + nid = NULL; } CScanSetup* CScanSetup::getInstance() @@ -281,6 +281,21 @@ int CScanSetup::exec(CMenuTarget* parent, const std::string &actionKey) } //starting scan + if(actionKey=="cable") { + printf("[neutrino] CScanSetup::%s: simple cable scan\n", __FUNCTION__); + saveScanSetup(); + /* for simple cable scan, force some options */ + scansettings.scan_reset_numbers = 0; + scansettings.scan_nit_manual = 1; + scansettings.scan_fta_flag = 0; + if (scansettings.scan_logical_numbers) { + g_settings.keep_channel_numbers = 1; + CServiceManager::getInstance()->KeepNumbers(g_settings.keep_channel_numbers); + } + CScanTs scanTs; + scanTs.exec(NULL, "manual"); + return res; + } std::string scants_key[] = {"all", "manual", "test", "fast", "auto"/*doesn't exists in CScanTs!*/}; for (uint i=0; i< (sizeof(scants_key)/sizeof(scants_key[0])); i++) @@ -333,6 +348,9 @@ int CScanSetup::showScanMenu() printf("[neutrino] CScanSetup call %s...\n", __FUNCTION__); int shortcut = 1; + CMenuForwarder * mf; + CMenuOptionChooser * mc; + allow_start = !CRecordManager::getInstance()->RecordingStatus() || CRecordManager::getInstance()->TimeshiftOnly(); //main @@ -343,47 +361,56 @@ int CScanSetup::showScanMenu() settings->addIntroItems(is_wizard ? NONEXISTANT_LOCALE : LOCALE_SERVICEMENU_SCANTS); //---------------------------------------------------------------------- //save scan settings - settings->addItem(new CMenuForwarder(LOCALE_MAINSETTINGS_SAVESETTINGSNOW, true, NULL, this, "save_scansettings", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED)); + mf = new CMenuForwarder(LOCALE_MAINSETTINGS_SAVESETTINGSNOW, true, NULL, this, "save_scansettings", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); + mf->setHint("", LOCALE_MENU_HINT_SCAN_SAVESETTINGS); + settings->addItem(mf); //---------------------------------------------------------------------- settings->addItem(GenericMenuSeparatorLine); //---------------------------------------------------------------------- //service select mode - settings->addItem(new CMenuOptionChooser(LOCALE_ZAPIT_SCANTYPE, (int *)&scansettings.scanType, SCANTS_ZAPIT_SCANTYPE, SCANTS_ZAPIT_SCANTYPE_COUNT, true, NULL, CRCInput::convertDigitToKey(shortcut++), "", true)); + mc = new CMenuOptionChooser(LOCALE_ZAPIT_SCANTYPE, (int *)&scansettings.scanType, SCANTS_ZAPIT_SCANTYPE, SCANTS_ZAPIT_SCANTYPE_COUNT, true, NULL, CRCInput::convertDigitToKey(shortcut++), "", true); + mc->setHint("", LOCALE_MENU_HINT_SCAN_SCANTYPE); + settings->addItem(mc); //bouquet generate mode - settings->addItem(new CMenuOptionChooser(LOCALE_SCANTS_BOUQUET, (int *)&scansettings.bouquetMode, SCANTS_BOUQUET_OPTIONS, SCANTS_BOUQUET_OPTION_COUNT, true, NULL, CRCInput::convertDigitToKey(shortcut++), "", true)); + mc = new CMenuOptionChooser(LOCALE_SCANTS_BOUQUET, (int *)&scansettings.bouquetMode, SCANTS_BOUQUET_OPTIONS, SCANTS_BOUQUET_OPTION_COUNT, true, NULL, CRCInput::convertDigitToKey(shortcut++), "", true); + mc->setHint("", LOCALE_MENU_HINT_SCAN_BOUQUET); + settings->addItem(mc); //sat/provider selector - satSelect = new CMenuOptionStringChooser(satprov_locale, scansettings.satNameNoDiseqc, true, NULL, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); + satSelect = new CMenuOptionStringChooser(satprov_locale, scansettings.satNameNoDiseqc, true, this, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); satOnOff = new CMenuWidget(satprov_locale, NEUTRINO_ICON_SETTINGS, width); if (r_system == DVB_S) //sat { + satSelect->setHint("", LOCALE_MENU_HINT_SCAN_SATELLITE); //settings->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SCANTS_PREVERENCES_RECEIVING_SYSTEM)); CMenuWidget * setupMenu = new CMenuWidget(LOCALE_SATSETUP_FE_SETUP, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_SCAN_FE_SETUP); addScanMenuFrontendSetup(setupMenu); - CMenuForwarder * fsetupMenu = new CMenuDForwarder(LOCALE_SATSETUP_FE_SETUP, true, NULL, setupMenu, "", CRCInput::convertDigitToKey(shortcut++)); - settings->addItem(fsetupMenu); + mf = new CMenuDForwarder(LOCALE_SATSETUP_FE_SETUP, true, NULL, setupMenu, "", CRCInput::convertDigitToKey(shortcut++)); + mf->setHint("", LOCALE_MENU_HINT_SCAN_FESETUP); + settings->addItem(mf); /* add configured satellites to satSelect */ - fillSatSelect(); + fillSatSelect(satSelect); } else if (r_system == DVB_C) //cable { + satSelect->setHint("", LOCALE_MENU_HINT_SCAN_CABLE); //-------------------------------------------------------------- settings->addItem(GenericMenuSeparatorLine); //-------------------------------------------------------------- - fillCableSelect(); + fillCableSelect(satSelect); //tune timeout - settings->addItem(new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_FE_TIMEOUT, (int *)&zapitCfg.feTimeout, true, 6, 100) ); + CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_FE_TIMEOUT, (int *)&zapitCfg.feTimeout, true, 6, 100); + nc->setHint("", LOCALE_MENU_HINT_SCAN_FETIMEOUT); + settings->addItem(nc); if(CFEManager::getInstance()->getFrontendCount() > 1) { femode = CFEManager::getInstance()->getMode(); - CMenuOptionChooser * mode = new CMenuOptionChooser(LOCALE_SATSETUP_FE_MODE, (int *)&femode, SATSETUP_FRONTEND_MODE, 2, true, this); - settings->addItem(mode); + mc = new CMenuOptionChooser(LOCALE_SATSETUP_FE_MODE, (int *)&femode, SATSETUP_FRONTEND_MODE, 2, true, this); + mc->setHint("", LOCALE_MENU_HINT_SCAN_FEMODE); + settings->addItem(mc); } -#if 0 - CIntInput* nid = new CIntInput(LOCALE_SATSETUP_CABLE_NID, (int&) scansettings.cable_nid, 5, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); - settings->addItem(new CMenuDForwarder(LOCALE_SATSETUP_CABLE_NID, true, nid->getValue(), nid)); -#endif + nid = new CIntInput(LOCALE_SATSETUP_CABLE_NID, (int&) scansettings.cable_nid, 5, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); } //-------------------------------------------------------------- settings->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SCANTS_PREVERENCES_SCAN)); @@ -399,48 +426,69 @@ int CScanSetup::showScanMenu() /* FIXME leak, satSelect added to both auto and manual scan, so one of them cannot be deleted */ CMenuWidget * autoScan = new CMenuWidget(LOCALE_SERVICEMENU_SCANTS, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_AUTO_SCAN); addScanMenuAutoScan(autoScan); - settings->addItem(new CMenuForwarderNonLocalized(autoscan, true, NULL, autoScan, "", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN)); + mf = new CMenuForwarderNonLocalized(autoscan, true, NULL, autoScan, "", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf->setHint("", LOCALE_MENU_HINT_SCAN_AUTO); + settings->addItem(mf); //manual scan CMenuWidget manualScan(LOCALE_SATSETUP_MANUAL_SCAN, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_MANUAL_SCAN); addScanMenuManualScan(&manualScan); - settings->addItem(new CMenuForwarder(LOCALE_SATSETUP_MANUAL_SCAN, true, NULL, &manualScan, "", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW)); + mf = new CMenuForwarder(LOCALE_SATSETUP_MANUAL_SCAN, true, NULL, &manualScan, "", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); + mf->setHint("", LOCALE_MENU_HINT_SCAN_MANUAL); + settings->addItem(mf); if (r_system == DVB_S) { //auto scan all CMenuWidget * autoScanAll = new CMenuWidget(LOCALE_SATSETUP_AUTO_SCAN_ALL, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_AUTO_SCAN_ALL); addScanMenuAutoScanAll(autoScanAll); - fautoScanAll = new CMenuDForwarder(LOCALE_SATSETUP_AUTO_SCAN_ALL, true /*(dmode != NO_DISEQC)*/, NULL, autoScanAll, "", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); + fautoScanAll = new CMenuDForwarder(LOCALE_SATSETUP_AUTO_SCAN_ALL, true /*(dmode != NO_DISEQC)*/, NULL, autoScanAll, "", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); + fautoScanAll->setHint("", LOCALE_MENU_HINT_SCAN_AUTOALL); settings->addItem(fautoScanAll); #ifdef ENABLE_FASTSCAN //fast scan CMenuWidget * fastScanMenu = new CMenuWidget(LOCALE_SATSETUP_FASTSCAN_HEAD, NEUTRINO_ICON_SETTINGS, MN_WIDGET_ID_SCAN_FAST_SCAN); addScanMenuFastScan(fastScanMenu); - settings->addItem(new CMenuDForwarder(LOCALE_SATSETUP_FASTSCAN_HEAD, true, NULL, fastScanMenu, "", CRCInput::convertDigitToKey(shortcut++))); + mf = new CMenuDForwarder(LOCALE_SATSETUP_FASTSCAN_HEAD, true, NULL, fastScanMenu, "", CRCInput::convertDigitToKey(shortcut++)); + mf->setHint("", LOCALE_MENU_HINT_SCAN_FAST); + settings->addItem(mf); #endif /*ENABLE_FASTSCAN*/ } + else if (r_system == DVB_C) //cable + { + CMenuWidget * cableScan = new CMenuWidget(LOCALE_SATSETUP_CABLE, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_CABLE_SCAN); + addScanMenuCable(cableScan); + CMenuForwarder * fcableScan = new CMenuDForwarder(LOCALE_SATSETUP_CABLE, true, NULL, cableScan, "", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); + fcableScan->setHint("", LOCALE_MENU_HINT_SCAN_CABLE_SIMPLE); + settings->addItem(fcableScan); + } int res = settings->exec(NULL, ""); //delete satSelect; delete satOnOff; delete settings; + delete nid; return res; } void CScanSetup::addScanMenuFrontendSetup(CMenuWidget * setupMenu) { + CMenuForwarder * mf; int shortcut = 1; + femode = CFEManager::getInstance()->getMode(); setupMenu->addIntroItems(); int count = CFEManager::getInstance()->getFrontendCount(); - CMenuOptionChooser * mode = new CMenuOptionChooser(LOCALE_SATSETUP_FE_MODE, (int *)&femode, SATSETUP_FRONTEND_MODE, SATSETUP_FRONTEND_MODE_COUNT, allow_start && (count > 1), this, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); - setupMenu->addItem(mode); - setupMenu->addItem(new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_FE_TIMEOUT, (int *)&zapitCfg.feTimeout, true, 6, 100) ); + CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_SATSETUP_FE_MODE, (int *)&femode, SATSETUP_FRONTEND_MODE, SATSETUP_FRONTEND_MODE_COUNT, allow_start && (count > 1), this, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); + mc->setHint("", LOCALE_MENU_HINT_SCAN_FEMODE); + setupMenu->addItem(mc); + CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_FE_TIMEOUT, (int *)&zapitCfg.feTimeout, true, 6, 100); + nc->setHint("", LOCALE_MENU_HINT_SCAN_FETIMEOUT); + setupMenu->addItem(nc); for(int i = 0; i < count; i++) { CFrontend * fe = CFEManager::getInstance()->getFE(i); @@ -450,27 +498,38 @@ void CScanSetup::addScanMenuFrontendSetup(CMenuWidget * setupMenu) char name[255]; snprintf(name, sizeof(name), "%s %d: %s", g_Locale->getText(LOCALE_SATSETUP_FE_SETUP), i+1, fe->getInfo()->name); - CMenuForwarder * fSetup = new CMenuForwarderNonLocalized(name, ((i == 0) || (femode == CFEManager::FE_MODE_ALONE)), NULL, this, tmp, + mf = new CMenuForwarderNonLocalized(name, ((i == 0) || (femode == CFEManager::FE_MODE_ALONE)), NULL, this, tmp, (i == 0) ? CRCInput::RC_green : CRCInput::RC_yellow, (i == 0) ? NEUTRINO_ICON_BUTTON_GREEN : NEUTRINO_ICON_BUTTON_YELLOW); - setupMenu->addItem(fSetup); + mf->setHint("", LOCALE_MENU_HINT_SCAN_SETUP_FE); + setupMenu->addItem(mf); if(i != 0) - frontendSetup = fSetup; + frontendSetup = mf; } sprintf(zapit_lat, "%02.6f", zapitCfg.gotoXXLatitude); sprintf(zapit_long, "%02.6f", zapitCfg.gotoXXLongitude); setupMenu->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SATSETUP_EXTENDED_MOTOR)); - setupMenu->addItem(new CMenuOptionChooser(LOCALE_EXTRA_LADIRECTION, (int *)&zapitCfg.gotoXXLaDirection, OPTIONS_SOUTH0_NORTH1_OPTIONS, OPTIONS_SOUTH0_NORTH1_OPTION_COUNT, true, NULL, CRCInput::convertDigitToKey(shortcut++))); + mc = new CMenuOptionChooser(LOCALE_EXTRA_LADIRECTION, (int *)&zapitCfg.gotoXXLaDirection, OPTIONS_SOUTH0_NORTH1_OPTIONS, OPTIONS_SOUTH0_NORTH1_OPTION_COUNT, true, NULL, CRCInput::convertDigitToKey(shortcut++)); + mc->setHint("", LOCALE_MENU_HINT_SCAN_LADIRECTION); + setupMenu->addItem(mc); CStringInput * toff1 = new CStringInput(LOCALE_EXTRA_LATITUDE, (char *) zapit_lat, 10, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789."); - setupMenu->addItem(new CMenuDForwarder(LOCALE_EXTRA_LATITUDE, true, zapit_lat, toff1, "", CRCInput::convertDigitToKey(shortcut++))); + mf = new CMenuDForwarder(LOCALE_EXTRA_LATITUDE, true, zapit_lat, toff1, "", CRCInput::convertDigitToKey(shortcut++)); + mf->setHint("", LOCALE_MENU_HINT_SCAN_LATITUDE); + setupMenu->addItem(mf); - setupMenu->addItem(new CMenuOptionChooser(LOCALE_EXTRA_LODIRECTION, (int *)&zapitCfg.gotoXXLoDirection, OPTIONS_EAST0_WEST1_OPTIONS, OPTIONS_EAST0_WEST1_OPTION_COUNT, true, NULL, CRCInput::convertDigitToKey(shortcut++))); + mc = new CMenuOptionChooser(LOCALE_EXTRA_LODIRECTION, (int *)&zapitCfg.gotoXXLoDirection, OPTIONS_EAST0_WEST1_OPTIONS, OPTIONS_EAST0_WEST1_OPTION_COUNT, true, NULL, CRCInput::convertDigitToKey(shortcut++)); + mc->setHint("", LOCALE_MENU_HINT_SCAN_LODIRECTION); + setupMenu->addItem(mc); CStringInput * toff2 = new CStringInput(LOCALE_EXTRA_LONGITUDE, (char *) zapit_long, 10, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789."); - setupMenu->addItem(new CMenuDForwarder(LOCALE_EXTRA_LONGITUDE, true, zapit_long, toff2, "", CRCInput::convertDigitToKey(shortcut++))); + mf = new CMenuDForwarder(LOCALE_EXTRA_LONGITUDE, true, zapit_long, toff2, "", CRCInput::convertDigitToKey(shortcut++)); + mf->setHint("", LOCALE_MENU_HINT_SCAN_LONGITUDE); + setupMenu->addItem(mf); - setupMenu->addItem(new CMenuOptionNumberChooser(LOCALE_SATSETUP_USALS_REPEAT, (int *)&zapitCfg.repeatUsals, true, 0, 10, NULL, 0, 0, LOCALE_OPTIONS_OFF) ); + nc = new CMenuOptionNumberChooser(LOCALE_SATSETUP_USALS_REPEAT, (int *)&zapitCfg.repeatUsals, true, 0, 10, NULL, 0, 0, LOCALE_OPTIONS_OFF); + nc->setHint("", LOCALE_MENU_HINT_SCAN_USALS_REPEAT); + setupMenu->addItem(nc); } int CScanSetup::showFrontendSetup(int number) @@ -482,12 +541,6 @@ int CScanSetup::showFrontendSetup(int number) fenumber = number; -#if 0 - itemsForAnyDiseqc.Clear(); - itemsForAdvancedDiseqc.Clear(); - itemsForNonAdvancedDiseqc.Clear(); -#endif - CFrontend * fe = CFEManager::getInstance()->getFE(number); frontend_config_t & fe_config = fe->getConfig(); dmode = fe_config.diseqcType; @@ -499,12 +552,12 @@ int CScanSetup::showFrontendSetup(int number) setupMenu->setSelected(feselected); setupMenu->addIntroItems(); - CMenuOptionChooser * ojDiseqc = new CMenuOptionChooser(LOCALE_SATSETUP_DISEQC, (int *)&dmode, SATSETUP_DISEQC_OPTIONS, SATSETUP_DISEQC_OPTION_COUNT, allow_start, this, CRCInput::convertDigitToKey(shortcut++), "", true); - /*CMenuOptionNumberChooser * */ ojDiseqcRepeats = new CMenuOptionNumberChooser(LOCALE_SATSETUP_DISEQCREPEAT, (int *)&fe_config.diseqcRepeats, (dmode != NO_DISEQC) && (dmode != DISEQC_ADVANCED), 0, 2, NULL); + CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_SATSETUP_DISEQC, (int *)&dmode, SATSETUP_DISEQC_OPTIONS, SATSETUP_DISEQC_OPTION_COUNT, allow_start, this, CRCInput::convertDigitToKey(shortcut++), "", true); + mc->setHint("", LOCALE_MENU_HINT_SCAN_DISEQCTYPE); + setupMenu->addItem(mc); - //itemsForAnyDiseqc.Add(ojDiseqcRepeats); - - setupMenu->addItem(ojDiseqc); + ojDiseqcRepeats = new CMenuOptionNumberChooser(LOCALE_SATSETUP_DISEQCREPEAT, (int *)&fe_config.diseqcRepeats, (dmode != NO_DISEQC) && (dmode != DISEQC_ADVANCED), 0, 2, NULL); + ojDiseqcRepeats->setHint("", LOCALE_MENU_HINT_SCAN_DISEQCREPEAT); setupMenu->addItem(ojDiseqcRepeats); CMenuWidget satToSelect(LOCALE_SATSETUP_SELECT_SAT, NEUTRINO_ICON_SETTINGS, width); @@ -514,27 +567,42 @@ int CScanSetup::showFrontendSetup(int number) for (sat_iterator_t sit = satmap.begin(); sit != satmap.end(); ++sit) { std::string satname = CServiceManager::getInstance()->GetSatelliteName(sit->first); - satToSelect.addItem(new CMenuOptionChooser(satname.c_str(), &sit->second.configured, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); + mc = new CMenuOptionChooser(satname.c_str(), &sit->second.configured, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_SCAN_SATENABLE); + satToSelect.addItem(mc); } - setupMenu->addItem(new CMenuForwarder(LOCALE_SATSETUP_SELECT_SAT, true, NULL, &satToSelect, "", CRCInput::convertDigitToKey(shortcut++))); + CMenuForwarder * mf = new CMenuForwarder(LOCALE_SATSETUP_SELECT_SAT, true, NULL, &satToSelect, "", CRCInput::convertDigitToKey(shortcut++)); + mf->setHint("", LOCALE_MENU_HINT_SCAN_SATADD); + setupMenu->addItem(mf); + //FIXME why fsatSetup not local variable ? fsatSetup = new CMenuForwarder(LOCALE_SATSETUP_SAT_SETUP, true, NULL, this, "satsetup", CRCInput::convertDigitToKey(shortcut++)); + fsatSetup->setHint("", LOCALE_MENU_HINT_SCAN_SATSETUP); setupMenu->addItem(fsatSetup); setupMenu->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SATSETUP_EXTENDED_MOTOR)); - setupMenu->addItem(new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_MOTOR_SPEED, (int *)&fe_config.motorRotationSpeed, true, 0, 64, NULL) ); - setupMenu->addItem(new CMenuOptionChooser(LOCALE_EXTRA_ZAPIT_HVOLTAGE, (int *)&fe_config.highVoltage, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); + CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_MOTOR_SPEED, (int *)&fe_config.motorRotationSpeed, true, 0, 64, NULL); + nc->setHint("", LOCALE_MENU_HINT_SCAN_MOTOR_SPEED); + setupMenu->addItem(nc); - CMenuOptionChooser * allusals = new CMenuOptionChooser(LOCALE_SATSETUP_USE_USALS, &all_usals, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this); - setupMenu->addItem(allusals); +#if 0 + mc = new CMenuOptionChooser(LOCALE_EXTRA_ZAPIT_HVOLTAGE, (int *)&fe_config.highVoltage, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + setupMenu->addItem(mc); +#endif - setupMenu->addItem(new CMenuForwarder(LOCALE_MOTORCONTROL_HEAD, true, NULL, this, "satfind", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED)); + mc = new CMenuOptionChooser(LOCALE_SATSETUP_USE_USALS, &all_usals, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this); + mc->setHint("", LOCALE_MENU_HINT_SCAN_USALSALL); + setupMenu->addItem(mc); + + mf = new CMenuForwarder(LOCALE_MOTORCONTROL_HEAD, true, NULL, this, "satfind", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); + mf->setHint("", LOCALE_MENU_HINT_SCAN_SATFIND); + setupMenu->addItem(mf); int res = setupMenu->exec(NULL, ""); feselected = setupMenu->getSelected(); /* add configured satellites to satSelect in case they changed */ - fillSatSelect(); + fillSatSelect(satSelect); delete setupMenu; return res; @@ -563,7 +631,6 @@ int CScanSetup::showScanMenuLnbSetup() if(!sit->second.configured) continue; - //std::string satname = it->second.name.c_str(); std::string satname = CServiceManager::getInstance()->GetSatelliteName(sit->first); //sub menu for sat settings to selectable sat item @@ -576,7 +643,11 @@ int CScanSetup::showScanMenuLnbSetup() sat_setup->addItem(new CMenuForwarderNonLocalized(satname.c_str(), true, mpos, tempsat)); } else #endif - sat_setup->addItem(new CMenuForwarderNonLocalized(satname.c_str(), true, NULL, tempsat)); + { + CMenuForwarder * mf = new CMenuForwarderNonLocalized(satname.c_str(), true, NULL, tempsat); + mf->setHint("", LOCALE_MENU_HINT_SCAN_LNBCONFIG); + sat_setup->addItem(mf); + } tmp[count] = tempsat; count++; } @@ -589,12 +660,12 @@ int CScanSetup::showScanMenuLnbSetup() return res; } -void CScanSetup::fillSatSelect() +void CScanSetup::fillSatSelect(CMenuOptionStringChooser * select) { std::set satpos; std::set::iterator tmpit; - satSelect->removeOptions(); + select->removeOptions(); satOnOff->resetWidget(true); satOnOff->addIntroItems(); @@ -608,7 +679,7 @@ void CScanSetup::fillSatSelect() tmpit = satpos.find(sit->first); if(sit->second.configured && tmpit == satpos.end()) { std::string satname = CServiceManager::getInstance()->GetSatelliteName(sit->first); - satSelect->addOption(satname.c_str()); + select->addOption(satname.c_str()); satpos.insert(sit->first); if (!sfound && strcmp(scansettings.satNameNoDiseqc, satname.c_str()) == 0) @@ -625,15 +696,17 @@ void CScanSetup::fillSatSelect() } satellite_map_t & satmap = CServiceManager::getInstance()->SatelliteList(); for (sat_iterator_t sit = satmap.begin(); sit != satmap.end(); sit++) { - if(satpos.find(sit->first) != satpos.end()) - satOnOff->addItem(new CMenuOptionChooser(sit->second.name.c_str(), &sit->second.use_in_scan, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); - else + if(satpos.find(sit->first) != satpos.end()) { + CMenuOptionChooser * mc = new CMenuOptionChooser(sit->second.name.c_str(), &sit->second.use_in_scan, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_SCAN_SATSCAN); + satOnOff->addItem(mc); + } else sit->second.use_in_scan = false; } } //init cable provider menu -void CScanSetup::fillCableSelect() +void CScanSetup::fillCableSelect(CMenuOptionStringChooser * select) { printf("[neutrino] CScanSetup call %s...\n", __FUNCTION__); //don't misunderstand the name "satSelect", in this context it's actually for cable providers @@ -642,7 +715,7 @@ void CScanSetup::fillCableSelect() for (sat_iterator_t sit = satmap.begin(); sit != satmap.end(); sit++) { printf("Adding cable menu for %s position %d\n", sit->second.name.c_str(), sit->first); - satSelect->addOption(sit->second.name.c_str()); + select->addOption(sit->second.name.c_str()); if (!sfound && strcmp(scansettings.satNameNoDiseqc, sit->second.name.c_str()) == 0) sfound = true; @@ -668,6 +741,8 @@ int CScanSetup::showScanMenuSatFind() sat_findMenu->addIntroItems(); CMenuOptionStringChooser * feSatSelect = new CMenuOptionStringChooser(satprov_locale, scansettings.satNameNoDiseqc, true, NULL, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); + feSatSelect->setHint("", LOCALE_MENU_HINT_SCAN_SATSELECT); + satellite_map_t & satmap = fe->getSatellites(); bool sfound = false; std::string firstname; @@ -688,14 +763,18 @@ int CScanSetup::showScanMenuSatFind() sat_findMenu->addItem(feSatSelect); CTPSelectHandler tpSelect; - sat_findMenu->addItem(new CMenuForwarder(LOCALE_SCANTS_SELECT_TP, true, NULL, &tpSelect, "test", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN)); + CMenuForwarder * mf = new CMenuForwarder(LOCALE_SCANTS_SELECT_TP, true, NULL, &tpSelect, "test", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf->setHint("", LOCALE_MENU_HINT_SCAN_TPSELECT); + sat_findMenu->addItem(mf); sat_findMenu->addItem(GenericMenuSeparatorLine); //-------------------------------------------------------------- addScanOptionsItems(sat_findMenu); //-------------------------------------------------------------- sat_findMenu->addItem(GenericMenuSeparatorLine); CMotorControl mcontrol(fenumber); - sat_findMenu->addItem(new CMenuForwarder(LOCALE_MOTORCONTROL_HEAD, allow_start, NULL, &mcontrol, "", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW)); + mf = new CMenuForwarder(LOCALE_MOTORCONTROL_HEAD, allow_start, NULL, &mcontrol, "", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); + mf->setHint("", LOCALE_MENU_HINT_SCAN_SATFIND_START); + sat_findMenu->addItem(mf); int res = sat_findMenu->exec(NULL, ""); delete sat_findMenu; @@ -708,23 +787,19 @@ void CScanSetup::addScanMenuTempSat(CMenuWidget *temp_sat, sat_config_t & satcon temp_sat->addIntroItems(); CMenuOptionNumberChooser *diseqc = new CMenuOptionNumberChooser(LOCALE_SATSETUP_DISEQC_INPUT, &satconfig.diseqc, ((dmode != NO_DISEQC) && (dmode != DISEQC_ADVANCED)), -1, 15, NULL, 1, -1, LOCALE_OPTIONS_OFF); + diseqc->setHint("", LOCALE_MENU_HINT_SCAN_DISEQC); CMenuOptionNumberChooser *comm = new CMenuOptionNumberChooser(LOCALE_SATSETUP_COMM_INPUT, &satconfig.commited, dmode == DISEQC_ADVANCED, -1, 15, NULL, 1, -1, LOCALE_OPTIONS_OFF); + comm->setHint("", LOCALE_MENU_HINT_SCAN_COMMITED); CMenuOptionNumberChooser *uncomm = new CMenuOptionNumberChooser(LOCALE_SATSETUP_UNCOMM_INPUT, &satconfig.uncommited, dmode == DISEQC_ADVANCED, -1, 15, NULL, 1, -1, LOCALE_OPTIONS_OFF); + uncomm->setHint("", LOCALE_MENU_HINT_SCAN_UNCOMMITED); CMenuOptionNumberChooser *motor = new CMenuOptionNumberChooser(LOCALE_SATSETUP_MOTOR_POS, &satconfig.motor_position, true /*dmode == DISEQC_ADVANCED*/, 0, 64, NULL, 0, 0, LOCALE_OPTIONS_OFF); + motor->setHint("", LOCALE_MENU_HINT_SCAN_MOTORPOS); CMenuOptionChooser *usals = new CMenuOptionChooser(LOCALE_EXTRA_USE_GOTOXX, &satconfig.use_usals, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true /*dmode == DISEQC_ADVANCED*/); + usals->setHint("", LOCALE_MENU_HINT_SCAN_USEUSALS); if(!satconfig.use_usals) all_usals = 0; -#if 0 - itemsForAnyDiseqc.Add(diseqc); - itemsForAdvancedDiseqc.Add(comm); - itemsForAdvancedDiseqc.Add(uncomm); -#endif - //FIXME testing motor without DISEQC_ADVANCED - //itemsForAdvancedDiseqc.Add(motor); - //itemsForAdvancedDiseqc.Add(usals); - CIntInput* lofL = new CIntInput(LOCALE_SATSETUP_LOFL, (int&) satconfig.lnbOffsetLow, 5, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); CIntInput* lofH = new CIntInput(LOCALE_SATSETUP_LOFH, (int&) satconfig.lnbOffsetHigh, 5, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); CIntInput* lofS = new CIntInput(LOCALE_SATSETUP_LOFS, (int&) satconfig.lnbSwitch, 5, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); @@ -734,9 +809,17 @@ void CScanSetup::addScanMenuTempSat(CMenuWidget *temp_sat, sat_config_t & satcon temp_sat->addItem(uncomm); temp_sat->addItem(motor); temp_sat->addItem(usals); - temp_sat->addItem(new CMenuDForwarder(LOCALE_SATSETUP_LOFL, true, lofL->getValue(), lofL)); - temp_sat->addItem(new CMenuDForwarder(LOCALE_SATSETUP_LOFH, true, lofH->getValue(), lofH)); - temp_sat->addItem(new CMenuDForwarder(LOCALE_SATSETUP_LOFS, true, lofS->getValue(), lofS)); + + CMenuForwarder * mf = new CMenuDForwarder(LOCALE_SATSETUP_LOFL, true, lofL->getValue(), lofL); + mf->setHint("", LOCALE_MENU_HINT_SCAN_LOFL); + temp_sat->addItem(mf); + mf = new CMenuDForwarder(LOCALE_SATSETUP_LOFH, true, lofH->getValue(), lofH); + mf->setHint("", LOCALE_MENU_HINT_SCAN_LOFH); + temp_sat->addItem(mf); + + mf = new CMenuDForwarder(LOCALE_SATSETUP_LOFS, true, lofS->getValue(), lofS); + mf->setHint("", LOCALE_MENU_HINT_SCAN_LOFS); + temp_sat->addItem(mf); } //init manual scan menu @@ -744,15 +827,23 @@ void CScanSetup::addScanMenuManualScan(CMenuWidget *manual_Scan) { printf("[neutrino] CScanSetup call %s...\n", __FUNCTION__); int shortCut = 1; + CMenuForwarder * mf; manual_Scan->addIntroItems(); //---------------------------------------------------------------------- manual_Scan->addItem(satSelect); if (r_system == DVB_C) { //cable +#if 0 CIntInput* nid = new CIntInput(LOCALE_SATSETUP_CABLE_NID, (int&) scansettings.cable_nid, 5, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); - manual_Scan->addItem(new CMenuDForwarder(LOCALE_SATSETUP_CABLE_NID, true, nid->getValue(), nid)); + mf = new CMenuDForwarder(LOCALE_SATSETUP_CABLE_NID, true, nid->getValue(), nid); +#endif + mf = new CMenuForwarder(LOCALE_SATSETUP_CABLE_NID, true, nid->getValue(), nid); + mf->setHint("", LOCALE_MENU_HINT_SCAN_NID); + manual_Scan->addItem(mf); } - manual_Scan->addItem(new CMenuDForwarder(LOCALE_SCANTS_SELECT_TP, true, NULL, new CTPSelectHandler()/*tpSelect*/, "test", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN)); + mf = new CMenuDForwarder(LOCALE_SCANTS_SELECT_TP, true, NULL, new CTPSelectHandler()/*tpSelect*/, "test", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf->setHint("", LOCALE_MENU_HINT_SCAN_TPSELECT); + manual_Scan->addItem(mf); manual_Scan->addItem(GenericMenuSeparatorLine); //---------------------------------------------------------------------- @@ -761,8 +852,13 @@ void CScanSetup::addScanMenuManualScan(CMenuWidget *manual_Scan) //---------------------------------------------------------------------- manual_Scan->addItem(GenericMenuSeparatorLine); - manual_Scan->addItem(new CMenuForwarder(LOCALE_SCANTS_TEST, allow_start, NULL, this, "test", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW)); - manual_Scan->addItem(new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, "manual", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE)); + mf = new CMenuForwarder(LOCALE_SCANTS_TEST, allow_start, NULL, this, "test", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); + mf->setHint("", LOCALE_MENU_HINT_SCAN_TEST); + manual_Scan->addItem(mf); + + mf = new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, "manual", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); + mf->setHint("", LOCALE_MENU_HINT_SCAN_START); + manual_Scan->addItem(mf); } //init auto scan all menu @@ -771,14 +867,18 @@ void CScanSetup::addScanMenuAutoScanAll(CMenuWidget *auto_ScanAll) printf("[neutrino] CScanSetup call %s...\n", __FUNCTION__); auto_ScanAll->addIntroItems(); //---------------------------------------------------------------------- - auto_ScanAll->addItem(new CMenuForwarder(satprov_locale, true, NULL, satOnOff, "", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED)); + CMenuForwarder * mf = new CMenuForwarder(satprov_locale, true, NULL, satOnOff, "", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); + mf->setHint("", LOCALE_MENU_HINT_SCAN_AUTOALL_SELECT); + auto_ScanAll->addItem(mf); auto_ScanAll->addItem(GenericMenuSeparatorLine); //---------------------------------------------------------------------- addListFlagsItems(auto_ScanAll, 1); //---------------------------------------------------------------------- auto_ScanAll->addItem(GenericMenuSeparatorLine); - auto_ScanAll->addItem(new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, "all", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN)); + mf = new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, "all", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf->setHint("", LOCALE_MENU_HINT_SCAN_START); + auto_ScanAll->addItem(mf); } #ifdef ENABLE_FASTSCAN @@ -805,14 +905,18 @@ void CScanSetup::addScanMenuFastScan(CMenuWidget *fast_ScanMenu) fast_ScanMenu->addIntroItems(); CMenuOptionChooser* fastProv = new CMenuOptionChooser(LOCALE_SATSETUP_FASTSCAN_PROV, (int *)&scansettings.fast_op, FAST_SCAN_PROV_OPTIONS, FAST_SCAN_PROV_OPTIONS_COUNT, true, NULL, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); + fastProv->setHint("", LOCALE_MENU_HINT_SCAN_FASTPROV); CMenuOptionChooser* fastType = new CMenuOptionChooser(LOCALE_SATSETUP_FASTSCAN_TYPE, (int *)&scansettings.fast_type, FAST_SCAN_OPTIONS, FAST_SCAN_OPTIONS_COUNT, true, NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN, true); + fastType->setHint("", LOCALE_MENU_HINT_SCAN_FASTTYPE); //---------------------------------------------------------------------- fast_ScanMenu->addItem(fastProv); fast_ScanMenu->addItem(fastType); //---------------------------------------------------------------------- fast_ScanMenu->addItem(GenericMenuSeparatorLine); - fast_ScanMenu->addItem(new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, "fast", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW)); + CMenuForwarder * mf = new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, "fast", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); + mf->setHint("", LOCALE_MENU_HINT_SCAN_START); + fast_ScanMenu->addItem(mf); } #endif /*ENABLE_FASTSCAN*/ @@ -820,19 +924,85 @@ void CScanSetup::addScanMenuFastScan(CMenuWidget *fast_ScanMenu) void CScanSetup::addScanMenuAutoScan(CMenuWidget *auto_Scan) { printf("[neutrino] CScanSetup call %s...\n", __FUNCTION__); + CMenuForwarder * mf; auto_Scan->addIntroItems(); auto_Scan->addItem(satSelect); if (r_system == DVB_C) { //cable +#if 0 CIntInput* nid = new CIntInput(LOCALE_SATSETUP_CABLE_NID, (int&) scansettings.cable_nid, 5, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); - auto_Scan->addItem(new CMenuDForwarder(LOCALE_SATSETUP_CABLE_NID, true, nid->getValue(), nid)); + mf = new CMenuDForwarder(LOCALE_SATSETUP_CABLE_NID, true, nid->getValue(), nid); +#endif + mf = new CMenuForwarder(LOCALE_SATSETUP_CABLE_NID, true, nid->getValue(), nid); + mf->setHint("", LOCALE_MENU_HINT_SCAN_NID); + auto_Scan->addItem(mf); } auto_Scan->addItem(GenericMenuSeparatorLine); //---------------------------------------------------------------------- addListFlagsItems(auto_Scan, 1); //---------------------------------------------------------------------- auto_Scan->addItem(GenericMenuSeparatorLine); - auto_Scan->addItem(new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, "auto", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN)); + mf = new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, "auto", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf->setHint("", LOCALE_MENU_HINT_SCAN_START); + auto_Scan->addItem(mf); +} + +//init simple cable scan menu +void CScanSetup::addScanMenuCable(CMenuWidget *menu) +{ + printf("[neutrino] CScanSetup call %s...\n", __FUNCTION__); + int shortCut = 1; + CMenuForwarder * mf; + + menu->addIntroItems(); + //---------------------------------------------------------------------- + CMenuOptionStringChooser * select = new CMenuOptionStringChooser(satprov_locale, scansettings.satNameNoDiseqc, true, this, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); + fillCableSelect(select); + select->setHint("", LOCALE_MENU_HINT_SCAN_CABLE); + menu->addItem(select); + + mf = new CMenuForwarder(LOCALE_SATSETUP_CABLE_NID, true, nid->getValue(), nid); + mf->setHint("", LOCALE_MENU_HINT_SCAN_NID); + menu->addItem(mf); + + mf = new CMenuDForwarder(LOCALE_SCANTS_SELECT_TP, true, NULL, new CTPSelectHandler(), "test", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf->setHint("", LOCALE_MENU_HINT_SCAN_TPSELECT); + menu->addItem(mf); + + menu->addItem(GenericMenuSeparatorLine); + + CStringInput *freq = new CStringInput(LOCALE_EXTRA_TP_FREQ, (char *) scansettings.TP_freq, freq_length, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); + CMenuForwarder *Freq = new CMenuDForwarder(LOCALE_EXTRA_TP_FREQ, true, scansettings.TP_freq, freq, "", CRCInput::convertDigitToKey(shortCut++)); + Freq->setHint("", LOCALE_MENU_HINT_SCAN_FREQ); + + CStringInput *rate = new CStringInput(LOCALE_EXTRA_TP_RATE, (char *) scansettings.TP_rate, 8, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); + CMenuForwarder *Rate = new CMenuDForwarder(LOCALE_EXTRA_TP_RATE, true, scansettings.TP_rate, rate, "", CRCInput::convertDigitToKey(shortCut++)); + Rate->setHint("", LOCALE_MENU_HINT_SCAN_RATE); + + CMenuOptionChooser * mod_pol = new CMenuOptionChooser(LOCALE_EXTRA_TP_MOD, (int *)&scansettings.TP_mod, SATSETUP_SCANTP_MOD, SATSETUP_SCANTP_MOD_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); + mod_pol->setHint("", LOCALE_MENU_HINT_SCAN_MOD); + + menu->addItem(Freq); + menu->addItem(Rate); + menu->addItem(mod_pol); + + CMenuOptionChooser *lcn = new CMenuOptionChooser(LOCALE_SATSETUP_LOGICAL_NUMBERS, (int *)&scansettings.scan_logical_numbers, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this, CRCInput::convertDigitToKey(shortCut++)); + lcn->setHint("", LOCALE_MENU_HINT_SCAN_LOGICAL); + menu->addItem(lcn); + + lcnhd = new CMenuOptionChooser(LOCALE_SATSETUP_LOGICAL_HD, (int *)&scansettings.scan_logical_hd, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, scansettings.scan_logical_numbers, NULL, CRCInput::convertDigitToKey(shortCut++)); + lcnhd->setHint("", LOCALE_MENU_HINT_SCAN_LOGICAL_HD); + menu->addItem(lcnhd); + + menu->addItem(GenericMenuSeparatorLine); +#if 0 + mf = new CMenuForwarder(LOCALE_SCANTS_TEST, allow_start, NULL, this, "test", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); + mf->setHint("", LOCALE_MENU_HINT_SCAN_TEST); + menu->addItem(mf); +#endif + mf = new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, "cable", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); + mf->setHint("", LOCALE_MENU_HINT_SCAN_START); + menu->addItem(mf); } //create scan options items @@ -843,18 +1013,23 @@ int CScanSetup::addScanOptionsItems(CMenuWidget *options_menu, const int &shortc CStringInput *freq = new CStringInput(LOCALE_EXTRA_TP_FREQ, (char *) scansettings.TP_freq, freq_length, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); CMenuForwarder *Freq = new CMenuDForwarder(LOCALE_EXTRA_TP_FREQ, true, scansettings.TP_freq, freq, "", CRCInput::convertDigitToKey(shortCut++)); + Freq->setHint("", LOCALE_MENU_HINT_SCAN_FREQ); CStringInput *rate = new CStringInput(LOCALE_EXTRA_TP_RATE, (char *) scansettings.TP_rate, 8, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); CMenuForwarder *Rate = new CMenuDForwarder(LOCALE_EXTRA_TP_RATE, true, scansettings.TP_rate, rate, "", CRCInput::convertDigitToKey(shortCut++)); + Rate->setHint("", LOCALE_MENU_HINT_SCAN_RATE); CMenuOptionChooser *fec = NULL; CMenuOptionChooser *mod_pol= NULL; if (r_system == DVB_S) { fec = new CMenuOptionChooser(LOCALE_EXTRA_TP_FEC, (int *)&scansettings.TP_fec, SATSETUP_SCANTP_FEC, fec_count, true, NULL, CRCInput::convertDigitToKey(shortCut++), "", true); + fec->setHint("", LOCALE_MENU_HINT_SCAN_FEC); mod_pol = new CMenuOptionChooser(LOCALE_EXTRA_TP_POL, (int *)&scansettings.TP_pol, SATSETUP_SCANTP_POL, SATSETUP_SCANTP_POL_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); + mod_pol->setHint("", LOCALE_MENU_HINT_SCAN_POL); } else if (r_system == DVB_C) { mod_pol = new CMenuOptionChooser(LOCALE_EXTRA_TP_MOD, (int *)&scansettings.TP_mod, SATSETUP_SCANTP_MOD, SATSETUP_SCANTP_MOD_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); + mod_pol->setHint("", LOCALE_MENU_HINT_SCAN_MOD); } options_menu->addItem(Freq); @@ -878,14 +1053,20 @@ int CScanSetup::addListFlagsItems(CMenuWidget *listflags_menu, const int &shortc else useNit = new CMenuOptionChooser(LOCALE_SATSETUP_USE_NIT, (int *)&scansettings.scan_nit, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); + useNit->setHint("", LOCALE_MENU_HINT_SCAN_NIT); + CMenuOptionChooser *ftaFlag = new CMenuOptionChooser(LOCALE_SATSETUP_USE_FTA_FLAG, (int *)&scansettings.scan_fta_flag, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); + ftaFlag->setHint("", LOCALE_MENU_HINT_SCAN_FTA); + CMenuOptionChooser *scanPid = new CMenuOptionChooser(LOCALE_EXTRA_ZAPIT_SCANPIDS, &zapitCfg.scanPids, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); + scanPid->setHint("", LOCALE_MENU_HINT_SCAN_PIDS); listflags_menu->addItem(useNit); listflags_menu->addItem(ftaFlag); listflags_menu->addItem(scanPid); CMenuOptionChooser *resetNum = new CMenuOptionChooser(LOCALE_SATSETUP_RESET_NUMBERS, (int *)&scansettings.scan_reset_numbers, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); + resetNum->setHint("", LOCALE_MENU_HINT_SCAN_RESET_NUMBERS); listflags_menu->addItem(resetNum); #if 0 // testing CMenuOptionChooser *useBat = new CMenuOptionChooser(LOCALE_SATSETUP_USE_BAT, (int *)&scansettings.scan_bat, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); @@ -920,6 +1101,8 @@ void CScanSetup::saveScanSetup() bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data*/) { + bool ret = false; + if(ARE_LOCALES_EQUAL(OptionName, LOCALE_SATSETUP_USE_USALS)) { CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); printf("[neutrino] CScanSetup::%s: all usals %d \n", __FUNCTION__, all_usals); @@ -934,27 +1117,12 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* fautoScanAll->setActive(dmode != NO_DISEQC); if(dmode == NO_DISEQC) { ojDiseqcRepeats->setActive(false); -#if 0 - itemsForAnyDiseqc.Activate(false); - itemsForAdvancedDiseqc.Activate(false); - itemsForNonAdvancedDiseqc.Activate(false); -#endif } else if(dmode < DISEQC_ADVANCED) { ojDiseqcRepeats->setActive(true); -#if 0 - itemsForAnyDiseqc.Activate(true); - itemsForAdvancedDiseqc.Activate(false); - itemsForNonAdvancedDiseqc.Activate(true); -#endif } else if(dmode == DISEQC_ADVANCED) { ojDiseqcRepeats->setActive(true); -#if 0 - itemsForAnyDiseqc.Activate(true); - itemsForAdvancedDiseqc.Activate(true); - itemsForNonAdvancedDiseqc.Activate(false); -#endif } CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); fe->setDiseqcType((diseqc_t) dmode); @@ -969,9 +1137,29 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* if(femode != CFEManager::FE_MODE_ALONE) CFEManager::getInstance()->saveSettings(true); if (r_system == DVB_S) //sat - fillSatSelect(); + fillSatSelect(satSelect); } - return false; + else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_CABLESETUP_PROVIDER)) { + printf("[neutrino] CScanSetup::%s: new provider: [%s]\n", __FUNCTION__, scansettings.satNameNoDiseqc); + satellite_map_t & satmap = CServiceManager::getInstance()->SatelliteList(); + for (sat_iterator_t sit = satmap.begin(); sit != satmap.end(); sit++) + { + if (strcmp(scansettings.satNameNoDiseqc, sit->second.name.c_str()) == 0) { + if(sit->second.cable_nid > 0) { + scansettings.cable_nid = sit->second.cable_nid; + nid->updateValue(); + ret = true; + } + + break; + } + } + } + else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_SATSETUP_LOGICAL_NUMBERS)) { +printf("[neutrino] CScanSetup::%s: logical numbers %d\n", __FUNCTION__, scansettings.scan_logical_numbers); + lcnhd->setActive(scansettings.scan_logical_numbers); + } + return ret; } void CScanSetup::updateManualSettings() diff --git a/src/gui/scan_setup.h b/src/gui/scan_setup.h index ea038ddd0..bdc7655e8 100644 --- a/src/gui/scan_setup.h +++ b/src/gui/scan_setup.h @@ -32,6 +32,7 @@ #include #include +#include #include #include @@ -57,13 +58,9 @@ class CScanSetup : public CMenuTarget, public CChangeObserver CMenuForwarder *frontendSetup; CMenuForwarder *fsatSetup; CMenuOptionNumberChooser * ojDiseqcRepeats; + CIntInput * nid; + CMenuOptionChooser * lcnhd; - /* dynamic frontend items to be enabled/disabled in notify */ -#if 0 - CGenericMenuActivate itemsForAdvancedDiseqc; - CGenericMenuActivate itemsForNonAdvancedDiseqc; - CGenericMenuActivate itemsForAnyDiseqc; -#endif /* variables for selected frontend */ /* diseqc mode */ int dmode; @@ -88,8 +85,8 @@ class CScanSetup : public CMenuTarget, public CChangeObserver int showFrontendSetup(int number); int showScanMenuLnbSetup(); int showScanMenuSatFind(); - void fillSatSelect(); - void fillCableSelect(); + void fillSatSelect(CMenuOptionStringChooser *select); + void fillCableSelect(CMenuOptionStringChooser *select); void addScanMenuFrontendSetup(CMenuWidget *settings); void addScanMenuTempSat(CMenuWidget *temp_sat, sat_config_t &satconfig); @@ -99,6 +96,7 @@ class CScanSetup : public CMenuTarget, public CChangeObserver void addScanMenuFastScan(CMenuWidget *fast_ScanMenu); #endif void addScanMenuAutoScan(CMenuWidget *auto_Scan); + void addScanMenuCable(CMenuWidget *menu); int addScanOptionsItems(CMenuWidget *options_menu, const int &shortcut = 1); int addListFlagsItems(CMenuWidget *listflags_menu, const int &shortcut = 1, bool manual = false); @@ -130,6 +128,4 @@ class CTPSelectHandler : public CMenuTarget //CScanSetup public: int exec(CMenuTarget* parent, const std::string &actionkey); }; - - #endif diff --git a/src/gui/streaminfo2.cpp b/src/gui/streaminfo2.cpp index ea7cbbc77..07396e261 100644 --- a/src/gui/streaminfo2.cpp +++ b/src/gui/streaminfo2.cpp @@ -501,7 +501,7 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) sprintf (buf, "20:9"); break; default: - strncpy (buf, g_Locale->getText (LOCALE_STREAMINFO_ARATIO_UNKNOWN), sizeof (buf)); + strncpy (buf, g_Locale->getText (LOCALE_STREAMINFO_ARATIO_UNKNOWN), sizeof (buf)-1); } g_Font[font_info]->RenderString (xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 @@ -535,7 +535,7 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) snprintf (buf,sizeof(buf), "60fps"); break; default: - strncpy (buf, g_Locale->getText (LOCALE_STREAMINFO_FRAMERATE_UNKNOWN), sizeof (buf)); + strncpy (buf, g_Locale->getText (LOCALE_STREAMINFO_FRAMERATE_UNKNOWN), sizeof (buf)-1); break; } g_Font[font_info]->RenderString (xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 diff --git a/src/gui/timerlist.cpp b/src/gui/timerlist.cpp index c7c2fd3f8..45803538a 100644 --- a/src/gui/timerlist.cpp +++ b/src/gui/timerlist.cpp @@ -327,7 +327,7 @@ int CTimerList::exec(CMenuTarget* parent, const std::string & actionKey) recinfo.recordingSafety = false; timerNew.announceTime-= 120; // 2 more mins for rec timer - strncpy(recinfo.recordingDir,timerNew.recordingDir,sizeof(recinfo.recordingDir)); + strncpy(recinfo.recordingDir,timerNew.recordingDir,sizeof(recinfo.recordingDir)-1); data = &recinfo; } else data= &eventinfo; @@ -364,7 +364,7 @@ int CTimerList::exec(CMenuTarget* parent, const std::string & actionKey) "%n", &timerNew.channel_id, &delta); - strncpy(timerNew_channel_name, &(key[3 + delta + 1]), 30); + strncpy(timerNew_channel_name, &(key[3 + delta + 1]), 29); g_RCInput->postMsg(CRCInput::RC_timeout, 0); // leave underlying menu also g_RCInput->postMsg(CRCInput::RC_timeout, 0); // leave underlying menu also return menu_return::RETURN_EXIT; @@ -588,6 +588,7 @@ int CTimerList::show() { update=true; } +#if 0 else if ((msg==CRCInput::RC_blue)|| (CRCInput::isNumeric(msg)) ) { @@ -595,6 +596,7 @@ int CTimerList::show() g_RCInput->postMsg( msg, data ); loop=false; } +#endif else if (msg==CRCInput::RC_setup) { res=menu_return::RETURN_EXIT_ALL; @@ -1050,7 +1052,7 @@ int CTimerList::modifyTimer() //printf("TIMER: rec dir %s len %s\n", timer->recordingDir, strlen(timer->recordingDir)); if (!strlen(timer->recordingDir)) - strncpy(timer->recordingDir,g_settings.network_nfs_recordingdir,sizeof(timer->recordingDir)); + strncpy(timer->recordingDir,g_settings.network_nfs_recordingdir,sizeof(timer->recordingDir)-1); bool recDirEnabled = (timer->eventType == CTimerd::TIMER_RECORD) && (g_settings.recording_type == RECORDING_FILE); CMenuForwarder* m6 = new CMenuForwarder(LOCALE_TIMERLIST_RECORDING_DIR, recDirEnabled, timer->recordingDir, this, "rec_dir1", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); @@ -1100,7 +1102,7 @@ int CTimerList::newTimer() timerNew.channel_id = 0; strcpy(timerNew.message, ""); timerNew_standby_on =false; - strncpy(timerNew.recordingDir,g_settings.network_nfs_recordingdir,sizeof(timerNew.recordingDir)); + strncpy(timerNew.recordingDir,g_settings.network_nfs_recordingdir,sizeof(timerNew.recordingDir)-1); CMenuWidget timerSettings(LOCALE_TIMERLIST_MENUNEW, NEUTRINO_ICON_SETTINGS); diff --git a/src/gui/update.cpp b/src/gui/update.cpp index 1addca84d..e6afd19ba 100644 --- a/src/gui/update.cpp +++ b/src/gui/update.cpp @@ -25,8 +25,9 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with this program; if not, write to the + Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H @@ -114,22 +115,6 @@ public: } }; - -class CNonLocalizedMenuSeparator : public CMenuSeparator -{ - const char * the_text; - -public: - CNonLocalizedMenuSeparator(const char * ptext, const neutrino_locale_t Text1) : CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, Text1) - { - the_text = ptext; - } - - virtual const char * getString(void) - { - return the_text; - } -}; //#define DEBUG bool CFlashUpdate::selectHttpImage(void) { diff --git a/src/gui/update.h b/src/gui/update.h index f92d71bac..6f85b9342 100644 --- a/src/gui/update.h +++ b/src/gui/update.h @@ -25,8 +25,9 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with this program; if not, write to the + Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. */ diff --git a/src/gui/update_menue.cpp b/src/gui/update_menue.cpp index aeb7f471c..e5f38e0e9 100644 --- a/src/gui/update_menue.cpp +++ b/src/gui/update_menue.cpp @@ -51,11 +51,13 @@ CSoftwareUpdate::CSoftwareUpdate() { width = w_max (40, 10); fe = new CFlashExpert(); + update_item = NULL; } CSoftwareUpdate::~CSoftwareUpdate() { delete fe; + delete update_item; } int CSoftwareUpdate::exec(CMenuTarget* parent, const std::string &/*actionKey*/) @@ -73,25 +75,33 @@ int CSoftwareUpdate::exec(CMenuTarget* parent, const std::string &/*actionKey*/) int CSoftwareUpdate::showSoftwareUpdate() /* shows the menue and options for software update */ { + CMenuForwarder * mf; CMenuWidget softUpdate(LOCALE_MAINMENU_SERVICE, NEUTRINO_ICON_UPDATE, width, MN_WIDGET_ID_SOFTWAREUPDATE); softUpdate.addIntroItems(LOCALE_SERVICEMENU_UPDATE); //flashing CFlashUpdate flash; - softUpdate.addItem(new CMenuForwarder(LOCALE_FLASHUPDATE_CHECKUPDATE, true, NULL, &flash, NULL, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED)); - + neutrino_locale_t up_text = (g_settings.softupdate_mode == 0) ? LOCALE_FLASHUPDATE_CHECKUPDATE_LOCAL : LOCALE_FLASHUPDATE_CHECKUPDATE_INTERNET; + update_item = new CMenuForwarder(up_text, true, NULL, &flash, NULL, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); + update_item->setHint("", LOCALE_MENU_HINT_SOFTUPDATE_CHECK); + softUpdate.addItem(update_item); + + //settings + CUpdateSettings update_settings(update_item); + mf = new CMenuForwarder(LOCALE_FLASHUPDATE_SETTINGS, true, NULL, &update_settings, NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf->setHint("", LOCALE_MENU_HINT_SOFTUPDATE_SETTINGS); + softUpdate.addItem(mf); + + softUpdate.addItem(GenericMenuSeparatorLine); + //expert-functions CMenuWidget mtdexpert(LOCALE_FLASHUPDATE_EXPERTFUNCTIONS, NEUTRINO_ICON_UPDATE, width, MN_WIDGET_ID_MTDEXPERT); showSoftwareUpdateExpert(&mtdexpert); - softUpdate.addItem(new CMenuForwarder(LOCALE_FLASHUPDATE_EXPERTFUNCTIONS, true, NULL, &mtdexpert, NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN)); - - softUpdate.addItem(GenericMenuSeparatorLine); - - //settings - CUpdateSettings update_settings; - softUpdate.addItem(new CMenuForwarder(LOCALE_FLASHUPDATE_SETTINGS, true, NULL, &update_settings, NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW )); - + mf = new CMenuForwarder(LOCALE_FLASHUPDATE_EXPERTFUNCTIONS, true, NULL, &mtdexpert, NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); + mf->setHint("", LOCALE_MENU_HINT_SOFTUPDATE_EXPERT); + softUpdate.addItem(mf); + int res = softUpdate.exec (NULL, ""); return res; } @@ -99,8 +109,13 @@ int CSoftwareUpdate::showSoftwareUpdate() /* shows experts-functions to read/write to the mtd */ void CSoftwareUpdate::showSoftwareUpdateExpert(CMenuWidget *w_mtd_expert) { + CMenuForwarder * mf; w_mtd_expert->addIntroItems(); - w_mtd_expert->addItem(new CMenuForwarder(LOCALE_FLASHUPDATE_READFLASHMTD , true, NULL, fe, "readflashmtd" , CRCInput::RC_red , NEUTRINO_ICON_BUTTON_RED)); - w_mtd_expert->addItem(new CMenuForwarder(LOCALE_FLASHUPDATE_WRITEFLASHMTD, true, NULL, fe, "writeflashmtd", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN)); + mf = new CMenuForwarder(LOCALE_FLASHUPDATE_READFLASHMTD , true, NULL, fe, "readflashmtd" , CRCInput::RC_red , NEUTRINO_ICON_BUTTON_RED); + mf->setHint("", LOCALE_MENU_HINT_SOFTUPDATE_EXPERT_READ); + w_mtd_expert->addItem(mf); + mf = new CMenuForwarder(LOCALE_FLASHUPDATE_WRITEFLASHMTD, true, NULL, fe, "writeflashmtd", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf->setHint("", LOCALE_MENU_HINT_SOFTUPDATE_EXPERT_WRITE); + w_mtd_expert->addItem(mf); } diff --git a/src/gui/update_menue.h b/src/gui/update_menue.h index 5b86a9dc7..683bdae0e 100644 --- a/src/gui/update_menue.h +++ b/src/gui/update_menue.h @@ -40,6 +40,7 @@ class CSoftwareUpdate : public CMenuTarget { private: int width; + CMenuForwarder * update_item; int showSoftwareUpdate(); void showSoftwareUpdateExpert(CMenuWidget *w_mtd_expert); diff --git a/src/gui/update_settings.cpp b/src/gui/update_settings.cpp index 93ca1fd8d..c6a432bd7 100644 --- a/src/gui/update_settings.cpp +++ b/src/gui/update_settings.cpp @@ -43,9 +43,10 @@ #include -CUpdateSettings::CUpdateSettings() +CUpdateSettings::CUpdateSettings(CMenuForwarder * update_item) { width = w_max (40, 10); + updateItem = update_item; #ifdef USE_SMS_INPUT input_url_file = new CStringInputSMS(LOCALE_FLASHUPDATE_URL_FILE, g_settings.softupdate_url_file, 30, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "abcdefghijklmnopqrstuvwxyz0123456789!""$%&/()=?-. "); #endif @@ -89,7 +90,7 @@ int CUpdateSettings::exec(CMenuTarget* parent, const std::string &actionKey) fileFilter.addFilter("urls"); fileBrowser.Filter = &fileFilter; if (fileBrowser.exec("/var/etc") == true) - strncpy(g_settings.softupdate_url_file, fileBrowser.getSelectedFile()->Name.c_str(), 31); + strncpy(g_settings.softupdate_url_file, fileBrowser.getSelectedFile()->Name.c_str(), 30); return res; } @@ -113,7 +114,7 @@ int CUpdateSettings::initMenu() #endif CMenuForwarder * fw_update_dir = new CMenuForwarder(LOCALE_EXTRA_UPDATE_DIR, !g_settings.softupdate_mode, g_settings.update_dir , this, "update_dir", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); - CUrlConfigSetupNotifier url_setup_notifier(fw_url, fw_update_dir); + CUrlConfigSetupNotifier url_setup_notifier(fw_url, fw_update_dir, updateItem); CMenuOptionChooser *oj_mode = new CMenuOptionChooser(LOCALE_FLASHUPDATE_UPDATEMODE, &g_settings.softupdate_mode, FLASHUPDATE_UPDATEMODE_OPTIONS, FLASHUPDATE_UPDATEMODE_OPTION_COUNT, true, &url_setup_notifier); @@ -128,10 +129,11 @@ int CUpdateSettings::initMenu() } -CUrlConfigSetupNotifier::CUrlConfigSetupNotifier( CMenuItem* i1, CMenuItem* i2) +CUrlConfigSetupNotifier::CUrlConfigSetupNotifier( CMenuItem* i1, CMenuItem* i2, CMenuForwarder * f1) { toDisable[0] = i1; toDisable[1] = i2; + updateItem = f1; } bool CUrlConfigSetupNotifier::changeNotify(const neutrino_locale_t, void *) @@ -139,9 +141,11 @@ bool CUrlConfigSetupNotifier::changeNotify(const neutrino_locale_t, void *) if (g_settings.softupdate_mode){ toDisable[0]->setActive(true); toDisable[1]->setActive(false); + updateItem->setTextLocale(LOCALE_FLASHUPDATE_CHECKUPDATE_INTERNET); }else{ toDisable[0]->setActive(false); toDisable[1]->setActive(true); + updateItem->setTextLocale(LOCALE_FLASHUPDATE_CHECKUPDATE_LOCAL); } return false; } diff --git a/src/gui/update_settings.h b/src/gui/update_settings.h index 11537b7c8..1c9b44198 100644 --- a/src/gui/update_settings.h +++ b/src/gui/update_settings.h @@ -49,8 +49,9 @@ class CUrlConfigSetupNotifier : public CChangeObserver { private: CMenuItem* toDisable[2]; + CMenuForwarder * updateItem; public: - CUrlConfigSetupNotifier( CMenuItem*, CMenuItem*); + CUrlConfigSetupNotifier( CMenuItem*, CMenuItem*, CMenuForwarder *); bool changeNotify(const neutrino_locale_t = NONEXISTANT_LOCALE, void *data = NULL); }; @@ -58,6 +59,7 @@ class CUpdateSettings : public CMenuTarget { private: int width; + CMenuForwarder * updateItem; int initMenu(); CFlashExpert *fe; @@ -66,7 +68,7 @@ class CUpdateSettings : public CMenuTarget #endif public: - CUpdateSettings(); + CUpdateSettings(CMenuForwarder * update_item); ~CUpdateSettings(); int exec(CMenuTarget* parent, const std::string & actionKey); }; diff --git a/src/gui/vfd_setup.cpp b/src/gui/vfd_setup.cpp index 2e6a43147..2373eae4d 100644 --- a/src/gui/vfd_setup.cpp +++ b/src/gui/vfd_setup.cpp @@ -76,12 +76,12 @@ int CVfdSetup::exec(CMenuTarget* parent, const std::string &actionKey) CVFD::getInstance()->setBrightness(brightness); CVFD::getInstance()->setBrightnessStandby(brightnessstandby); CVFD::getInstance()->setBrightnessDeepStandby(brightnessdeepstandby); - return menu_return::RETURN_REPAINT;; + return menu_return::RETURN_REPAINT; } int res = showSetup(); - - return res; + + return res; } #define LCDMENU_STATUSLINE_OPTION_COUNT 2 @@ -116,24 +116,30 @@ int CVfdSetup::showSetup() //vfd brightness menu CMenuWidget lcd_sliders(LOCALE_LCDMENU_HEAD, NEUTRINO_ICON_LCD,width, MN_WIDGET_ID_VFDSETUP_LCD_SLIDERS); showBrightnessSetup(&lcd_sliders); - vfds->addItem(new CMenuForwarder(LOCALE_LCDMENU_LCDCONTROLER, vfd_enabled, NULL, &lcd_sliders, NULL, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED)); - + CMenuForwarder * mf = new CMenuForwarder(LOCALE_LCDMENU_LCDCONTROLER, vfd_enabled, NULL, &lcd_sliders, NULL, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); + mf->setHint("", LOCALE_MENU_HINT_VFD_BRIGHTNESS_SETUP); + vfds->addItem(mf); + //led menu - if(cs_get_revision() > 7) + if(cs_get_revision() > 7) { CMenuWidget * ledMenu = new CMenuWidget(LOCALE_LCDMENU_HEAD, NEUTRINO_ICON_LCD, width, MN_WIDGET_ID_VFDSETUP_LED_SETUP); showLedSetup(ledMenu); - vfds->addItem(new CMenuDForwarder(LOCALE_LEDCONTROLER_MENU, true, NULL, ledMenu, NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN)); + mf = new CMenuDForwarder(LOCALE_LEDCONTROLER_MENU, true, NULL, ledMenu, NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf->setHint("", LOCALE_MENU_HINT_POWER_LEDS); + vfds->addItem(mf); } vfds->addItem(GenericMenuSeparatorLine); //status and info line options CMenuOptionChooser* oj = new CMenuOptionChooser(LOCALE_LCDMENU_STATUSLINE, &g_settings.lcd_setting[SNeutrinoSettings::LCD_SHOW_VOLUME], LCDMENU_STATUSLINE_OPTIONS, LCDMENU_STATUSLINE_OPTION_COUNT, vfd_enabled); + oj->setHint("", LOCALE_MENU_HINT_VFD_STATUSLINE); CMenuOptionChooser* lcd_clock_channelname_menu = new CMenuOptionChooser(LOCALE_LCD_INFO_LINE, &g_settings.lcd_info_line, LCD_INFO_OPTIONS, LCD_INFO_OPTION_COUNT, vfd_enabled); + lcd_clock_channelname_menu->setHint("", LOCALE_MENU_HINT_VFD_INFOLINE); vfds->addItem(oj); vfds->addItem(lcd_clock_channelname_menu); - + int res = vfds->exec(NULL, ""); delete vfds; @@ -142,35 +148,71 @@ int CVfdSetup::showSetup() void CVfdSetup::showBrightnessSetup(CMenuWidget *mn_widget) { + CMenuOptionNumberChooser * nc; + CMenuForwarder * mf; + mn_widget->addIntroItems(LOCALE_LCDMENU_LCDCONTROLER); - + brightness = CVFD::getInstance()->getBrightness(); brightnessstandby = CVFD::getInstance()->getBrightnessStandby(); brightnessdeepstandby = CVFD::getInstance()->getBrightnessDeepStandby(); - mn_widget->addItem(new CMenuOptionNumberChooser(LOCALE_LCDCONTROLER_BRIGHTNESS, &brightness, true, 0, 15, this, 0, 0, NONEXISTANT_LOCALE, NULL, true)); - mn_widget->addItem(new CMenuOptionNumberChooser(LOCALE_LCDCONTROLER_BRIGHTNESSSTANDBY, &brightnessstandby, true, 0, 15, this, 0, 0, NONEXISTANT_LOCALE, NULL, true)); - if(cs_get_revision() > 7) - mn_widget->addItem(new CMenuOptionNumberChooser(LOCALE_LCDCONTROLER_BRIGHTNESSDEEPSTANDBY, &brightnessdeepstandby, true, 0, 15, this, 0, 0, NONEXISTANT_LOCALE, NULL, true)); - mn_widget->addItem(new CMenuOptionNumberChooser(LOCALE_LCDMENU_DIM_BRIGHTNESS, &g_settings.lcd_setting_dim_brightness, vfd_enabled, -1, 15, NULL, 0, -1, LOCALE_OPTIONS_OFF, NULL, true)); + nc = new CMenuOptionNumberChooser(LOCALE_LCDCONTROLER_BRIGHTNESS, &brightness, true, 0, 15, this, 0, 0, NONEXISTANT_LOCALE, NULL, true); + nc->setHint("", LOCALE_MENU_HINT_VFD_BRIGHTNESS); + mn_widget->addItem(nc); + + nc = new CMenuOptionNumberChooser(LOCALE_LCDCONTROLER_BRIGHTNESSSTANDBY, &brightnessstandby, true, 0, 15, this, 0, 0, NONEXISTANT_LOCALE, NULL, true); + nc->setHint("", LOCALE_MENU_HINT_VFD_BRIGHTNESSSTANDBY); + mn_widget->addItem(nc); + + if(cs_get_revision() > 7) { + nc = new CMenuOptionNumberChooser(LOCALE_LCDCONTROLER_BRIGHTNESSDEEPSTANDBY, &brightnessdeepstandby, true, 0, 15, this, 0, 0, NONEXISTANT_LOCALE, NULL, true); + nc->setHint("", LOCALE_MENU_HINT_VFD_BRIGHTNESSDEEPSTANDBY); + mn_widget->addItem(nc); + } + nc = new CMenuOptionNumberChooser(LOCALE_LCDMENU_DIM_BRIGHTNESS, &g_settings.lcd_setting_dim_brightness, vfd_enabled, -1, 15, NULL, 0, -1, LOCALE_OPTIONS_OFF, NULL, true); + nc->setHint("", LOCALE_MENU_HINT_VFD_BRIGHTNESSDIM); + mn_widget->addItem(nc); + mn_widget->addItem(GenericMenuSeparatorLine); if (dim_time == NULL) dim_time = new CStringInput(LOCALE_LCDMENU_DIM_TIME, g_settings.lcd_setting_dim_time, 3, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE,"0123456789 "); - mn_widget->addItem(new CMenuForwarder(LOCALE_LCDMENU_DIM_TIME, vfd_enabled, g_settings.lcd_setting_dim_time,dim_time)); + + mf = new CMenuForwarder(LOCALE_LCDMENU_DIM_TIME, vfd_enabled, g_settings.lcd_setting_dim_time,dim_time); + mf->setHint("", LOCALE_MENU_HINT_VFD_DIMTIME); + mn_widget->addItem(mf); + mn_widget->addItem(GenericMenuSeparatorLine); - mn_widget->addItem(new CMenuForwarder(LOCALE_OPTIONS_DEFAULT, true, NULL, this, "def", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED)); + mf = new CMenuForwarder(LOCALE_OPTIONS_DEFAULT, true, NULL, this, "def", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); + mf->setHint("", LOCALE_MENU_HINT_VFD_DEFAULTS); + mn_widget->addItem(mf); } void CVfdSetup::showLedSetup(CMenuWidget *mn_led_widget) { + CMenuOptionChooser * mc; mn_led_widget->addIntroItems(LOCALE_LEDCONTROLER_MENU); - mn_led_widget->addItem(new CMenuOptionChooser(LOCALE_LEDCONTROLER_MODE_TV, &g_settings.led_tv_mode, LEDMENU_OPTIONS, LEDMENU_OPTION_COUNT, true, this)); - mn_led_widget->addItem(new CMenuOptionChooser(LOCALE_LEDCONTROLER_MODE_STANDBY, &g_settings.led_standby_mode, LEDMENU_OPTIONS, LEDMENU_OPTION_COUNT, true)); - mn_led_widget->addItem(new CMenuOptionChooser(LOCALE_LEDCONTROLER_MODE_DEEPSTANDBY, &g_settings.led_deep_mode, LEDMENU_OPTIONS, LEDMENU_OPTION_COUNT, true)); - mn_led_widget->addItem(new CMenuOptionChooser(LOCALE_LEDCONTROLER_MODE_RECORD, &g_settings.led_rec_mode, LEDMENU_OPTIONS, LEDMENU_OPTION_COUNT, true)); - mn_led_widget->addItem(new CMenuOptionChooser(LOCALE_LEDCONTROLER_BLINK, &g_settings.led_blink, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); -} + mc = new CMenuOptionChooser(LOCALE_LEDCONTROLER_MODE_TV, &g_settings.led_tv_mode, LEDMENU_OPTIONS, LEDMENU_OPTION_COUNT, true, this); + mc->setHint("", LOCALE_MENU_HINT_LEDS_TV); + mn_led_widget->addItem(mc); + + mc = new CMenuOptionChooser(LOCALE_LEDCONTROLER_MODE_STANDBY, &g_settings.led_standby_mode, LEDMENU_OPTIONS, LEDMENU_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_LEDS_STANDBY); + mn_led_widget->addItem(mc); + + mc = new CMenuOptionChooser(LOCALE_LEDCONTROLER_MODE_DEEPSTANDBY, &g_settings.led_deep_mode, LEDMENU_OPTIONS, LEDMENU_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_LEDS_DEEPSTANDBY); + mn_led_widget->addItem(mc); + + mc = new CMenuOptionChooser(LOCALE_LEDCONTROLER_MODE_RECORD, &g_settings.led_rec_mode, LEDMENU_OPTIONS, LEDMENU_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_LEDS_RECORD); + mn_led_widget->addItem(mc); + + mc = new CMenuOptionChooser(LOCALE_LEDCONTROLER_BLINK, &g_settings.led_blink, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_LEDS_BLINK); + mn_led_widget->addItem(mc); +} bool CVfdSetup::changeNotify(const neutrino_locale_t OptionName, void */* data */) { diff --git a/src/gui/widget/Makefile.am b/src/gui/widget/Makefile.am index 6cdfee1fe..4b12dbb6a 100644 --- a/src/gui/widget/Makefile.am +++ b/src/gui/widget/Makefile.am @@ -22,6 +22,7 @@ noinst_LIBRARIES = libneutrino_gui_widget.a libneutrino_gui_widget2.a libneutrino_gui_widget_a_SOURCES = \ buttons.cpp \ colorchooser.cpp \ + components.cpp \ drawable.cpp \ helpbox.cpp \ hintbox.cpp \ diff --git a/src/gui/widget/components.cpp b/src/gui/widget/components.cpp new file mode 100644 index 000000000..52f64db69 --- /dev/null +++ b/src/gui/widget/components.cpp @@ -0,0 +1,282 @@ +/* + GUI window component classes - Neutrino-GUI + + Copyright(C) 2012, Thilo Graf (dbt) + + This class contains generic components for GUI-related parts. + + License: GPL + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the + Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + + + + + +//basic class CComponents +CComponents::CComponents(const int x_pos, const int y_pos, const int h, const int w) +{ + x = x_pos; + y = y_pos; + height = h; + width = w; + sw = 0; //shadow width + frameBuffer = CFrameBuffer::getInstance(); + v_screen_val.clear(); +} + +CComponents::~CComponents() +{ + clear(); +} + +//paint framebuffer stuff and fill buffer +void CComponents::paintFbItems(struct comp_fbdata_t * fbdata, const int items_count, bool do_save_bg) +{ + int i; + for(i=0; i< items_count ;i++){ + if (do_save_bg) + fbdata[i].pixbuf = saveScreen(fbdata[i].x, fbdata[i].y, fbdata[i].dx, fbdata[i].dy); + v_screen_val.push_back(fbdata[i]); + } + + for(i=0; i< items_count ;i++){ + if (fbdata[i].is_frame) + frameBuffer->paintBoxFrame(fbdata[i].x, fbdata[i].y, fbdata[i].dx, fbdata[i].dy, fbdata[i].frame_thickness, fbdata[i].color, fbdata[i].r); + else + frameBuffer->paintBoxRel(fbdata[i].x, fbdata[i].y, fbdata[i].dx, fbdata[i].dy, fbdata[i].color, fbdata[i].r); + } +} + +//screen area save +inline fb_pixel_t* CComponents::saveScreen(int ax, int ay, int dx, int dy) +{ + fb_pixel_t* pixbuf = new fb_pixel_t[dx * dy]; + frameBuffer->SaveScreen(ax, ay, dx, dy, pixbuf); + return pixbuf; +} + +//restore screen +inline void CComponents::restore() +{ + for(size_t i =0; i< v_screen_val.size() ;i++) { + if (v_screen_val[i].pixbuf != NULL){ + frameBuffer->RestoreScreen(v_screen_val[i].x, v_screen_val[i].y, v_screen_val[i].dx, v_screen_val[i].dy, v_screen_val[i].pixbuf); + delete[] v_screen_val[i].pixbuf; + } + } + v_screen_val.clear(); +} + +//clean old screen buffer +inline void CComponents::clear() +{ + for(size_t i =0; i< v_screen_val.size() ;i++) + if (v_screen_val[i].pixbuf != NULL) + delete[] v_screen_val[i].pixbuf; + v_screen_val.clear(); +} + +//------------------------------------------------------------------------------------------------------- +//sub class CComponentsDetailLine +CComponentsDetailLine::CComponentsDetailLine(const int x_pos, const int y_pos_top, const int y_pos_down, const int h_mark_top_, const int h_mark_down_, fb_pixel_t color_line, fb_pixel_t color_shadow) +{ + x = x_pos; + width = 16; + thickness = 4; + sw = 1; //shadow width + y = y_pos_top; + y_down = y_pos_down; + h_mark_top = h_mark_top_; + h_mark_down = h_mark_down_; + col_line = color_line; + col_shadow = color_shadow; +} + +CComponentsDetailLine::~CComponentsDetailLine() +{ + clear(); +} + +// y_top (=y) +// xpos +--|h_mark_up +// | +// | +// | +// | +// | +// | +// | +// | +// | +// +--|h_mark_down +// y_down + + +#define DLINE_ITEMS_COUNT 12 +//paint details line with current parameters +void CComponentsDetailLine::paint(bool do_save_bg) +{ + clear(); + + int y_mark_top = y-h_mark_top/2+thickness/2; + int y_mark_down = y_down-h_mark_down/2+thickness/2; + + comp_fbdata_t fbdata[DLINE_ITEMS_COUNT] = + { + /* vertical item mark | */ + {x+width-thickness-sw, y_mark_top, thickness, h_mark_top, col_line, 0, NULL, NULL, false, 0}, + {x+width-sw, y_mark_top, sw, h_mark_top, col_shadow, 0, NULL, NULL, false, 0}, + {x+width-thickness-sw, y_mark_top+h_mark_top, thickness+sw, sw , col_shadow, 0, NULL, NULL, false, 0}, + + /* horizontal item line - */ + {x, y, width-thickness-sw, thickness, col_line, 0, NULL, NULL, false, 0}, + {x+thickness, y+thickness, width-2*thickness-sw, sw, col_shadow, 0, NULL, NULL, false, 0}, + + /* vertical connect line [ */ + {x, y+thickness, thickness, y_down-y-thickness, col_line, 0, NULL, NULL, false, 0}, + {x+thickness, y+thickness+sw, sw, y_down-y-thickness-sw, col_shadow, 0, NULL, NULL, false, 0}, + + /* horizontal info line - */ + {x, y_down, width-thickness-sw, thickness, col_line, 0, NULL, NULL, false, 0}, + {x, y_down+thickness, width-thickness-sw, sw, col_shadow, 0, NULL, NULL, false, 0}, + + /* vertical info mark | */ + {x+width-thickness-sw, y_mark_down, thickness, h_mark_down, col_line, 0, NULL, NULL, false, 0}, + {x+width-sw, y_mark_down, sw, h_mark_down, col_shadow, 0, NULL, NULL, false, 0}, + {x+width-thickness-sw, y_mark_down+h_mark_down,thickness+sw, sw, col_shadow, 0, NULL, NULL, false, 0}, + }; + + paintFbItems(fbdata, DLINE_ITEMS_COUNT, do_save_bg); +} + +//remove painted lines from screen +void CComponentsDetailLine::hide() +{ + //caching current colors + fb_pixel_t c_tmp1, c_tmp2; + c_tmp1 = col_line; + c_tmp2 = col_shadow; + + //set background color + col_line = col_shadow = COL_BACKGROUND; + + //paint with background and restore, set last used colors + paint(false); + col_line = c_tmp1; + col_shadow = c_tmp2; +} + + +//------------------------------------------------------------------------------------------------------- +//sub class CComponentsInfoBox +CComponentsInfoBox::CComponentsInfoBox(const int x_pos, const int y_pos, const int w, const int h, bool has_shadow, fb_pixel_t color_frame, fb_pixel_t color_body, fb_pixel_t color_shadow) +{ + x = x_pos; + y = y_pos; + width = w; + height = h; + rad = 0; + shadow = has_shadow; + col_frame = color_frame; + col_body = color_body; + col_shadow = color_shadow; + fr_thickness = 2; + firstPaint = true; + v_infobox_val.clear(); +} + +#define INFOBOX_ITEMS_COUNT 3 +void CComponentsInfoBox::paint(bool do_save_bg, bool fullPaint) +{ + clear(); + rad = RADIUS_LARGE; + + comp_fbdata_t fbdata[INFOBOX_ITEMS_COUNT] = + { + {x+SHADOW_OFFSET, y+SHADOW_OFFSET, width, height, col_shadow, rad, NULL, NULL, false, 0}, + {x, y, width, height, col_frame, rad, NULL, NULL, false, 0}, + {x+fr_thickness, y+fr_thickness, width-2*fr_thickness, height-2*fr_thickness, col_body, rad, NULL, NULL, false, 0}, + }; + + int start = (shadow) ? 0 : 1; + if (firstPaint) { + if (do_save_bg) { + v_infobox_val.clear(); + for(int i = start; i < INFOBOX_ITEMS_COUNT; i++) { + fbdata[i].pixbuf = saveScreen(fbdata[i].x, fbdata[i].y, fbdata[i].dx, fbdata[i].dy); + v_infobox_val.push_back(fbdata[i]); + fbdata[i].pixbuf = NULL; + } + } + // paint infobox full + paintFbItems((comp_fbdata_t*)&fbdata[start], INFOBOX_ITEMS_COUNT - start, false); + firstPaint = false; + } + else { + if (fullPaint) + // paint infobox full + paintFbItems((comp_fbdata_t*)&fbdata[start], INFOBOX_ITEMS_COUNT - start, false); + else + // paint body only + paintFbItems((comp_fbdata_t*)&fbdata[INFOBOX_ITEMS_COUNT - 1], 1, false); + } +} + +//restore infobox +void CComponentsInfoBox::restore(bool clear_) +{ + if (!v_infobox_val.empty()) { + for(size_t i =0; i< v_infobox_val.size() ;i++) { + if (v_infobox_val[i].pixbuf != NULL) { + frameBuffer->RestoreScreen(v_infobox_val[i].x, v_infobox_val[i].y, v_infobox_val[i].dx, v_infobox_val[i].dy, v_infobox_val[i].pixbuf); + if (clear_) + delete[] v_infobox_val[i].pixbuf; + } + } + if (clear_) { + v_infobox_val.clear(); + firstPaint = true; + } + } +} + +void CComponentsInfoBox::hide() +{ + //caching current colors + fb_pixel_t c_tmp1, c_tmp2, c_tmp3; + c_tmp1 = col_body; + c_tmp2 = col_shadow; + c_tmp3 = col_frame; + + //set background color + col_body = col_frame = col_shadow = COL_BACKGROUND; + + //paint with background and restore, set last used colors + paint(false); + col_body = c_tmp1; + col_shadow = c_tmp2; + col_frame = c_tmp3; +} diff --git a/src/gui/widget/components.h b/src/gui/widget/components.h new file mode 100644 index 000000000..78f2bed53 --- /dev/null +++ b/src/gui/widget/components.h @@ -0,0 +1,110 @@ +/* + GUI window component classes - Neutrino-GUI + + Copyright(C) 2012, Thilo Graf (dbt) + + This class contains generic components for GUI-related parts. + + License: GPL + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the + Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef __COMPONENTS__ +#define __COMPONENTS__ + +#include +#include +#include +#include + +//required typedefs +typedef struct comp_fbdata_t +{ + int x; + int y; + int dx; + int dy; + fb_pixel_t color; + int r; + void * data; + fb_pixel_t* pixbuf; + bool is_frame; + int frame_thickness; +} comp_fbdata_struct_t; + +class CComponents +{ + protected: + int x, y, height, width, sw; + CFrameBuffer * frameBuffer; + std::vector v_screen_val; + + void paintFbItems(struct comp_fbdata_t * fbdata, const int items_count, bool do_save_bg = true); + fb_pixel_t* saveScreen(int ax, int ay, int dx, int dy); + void clear(); + + public: + CComponents(const int x_pos = 0, const int y_pos = 0, const int h = 0, const int w = 0); + virtual~CComponents(); + + virtual void setXPos(const int& xpos){x = xpos;}; + virtual void setYPos(const int& ypos){y = ypos;}; + virtual void setHeight(const int& h){height = h;}; + virtual void setWidth(const int& w){width = w;}; + virtual void restore(); +}; + +class CComponentsDetailLine : public CComponents +{ + private: + int thickness, y_down, h_mark_top, h_mark_down; + fb_pixel_t col_line, col_shadow; + + public: + CComponentsDetailLine( const int x_pos,const int y_pos_top, const int y_pos_down, + const int h_mark_up =16 , const int h_mark_down = 16, + fb_pixel_t color_line = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); + ~CComponentsDetailLine(); + + void paint(bool do_save_bg = true); + void hide(); + void setColor(fb_pixel_t color_line, fb_pixel_t color_shadow){col_line = color_line; col_shadow = color_shadow;}; + void setYPosDown(const int& y_pos_down){y_down = y_pos_down;}; + void setHMarkDown(const int& h_mark_down_){h_mark_down = h_mark_down_;}; +}; + +#define INFO_BOX_Y_OFFSET 2 +class CComponentsInfoBox : public CComponents +{ + private: + int rad,fr_thickness; + bool shadow; + fb_pixel_t col_frame, col_body, col_shadow; + bool firstPaint; + std::vector v_infobox_val; + + public: + CComponentsInfoBox( const int x_pos, const int y_pos, const int w, const int h, bool has_shadow = true, + fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUCONTENTDARK_PLUS_0,fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); + + void paint(bool do_save_bg = true, bool fullPaint = false); + void hide(); + void restore(bool clear_ = true); + void setColor(fb_pixel_t color_frame, fb_pixel_t color_body, fb_pixel_t color_shadow){col_frame = color_frame; col_body = color_body; col_shadow = color_shadow;}; +}; + +#endif diff --git a/src/gui/widget/icons.h b/src/gui/widget/icons.h index c0b43eb3f..fa5a77fdd 100644 --- a/src/gui/widget/icons.h +++ b/src/gui/widget/icons.h @@ -169,6 +169,7 @@ /* menu hints */ #define NEUTRINO_ICON_HINT_BACK "hint_back" /* main menu */ +#define NEUTRINO_ICON_HINT_TVRADIO_SWITCH "hint_tvradio_switch" #define NEUTRINO_ICON_HINT_TVMODE "hint_tvmode" #define NEUTRINO_ICON_HINT_RADIOMODE "hint_radiomode" #define NEUTRINO_ICON_HINT_TIMERS "hint_timers" diff --git a/src/gui/widget/listbox.h b/src/gui/widget/listbox.h index f4f556f9c..ce52081e0 100644 --- a/src/gui/widget/listbox.h +++ b/src/gui/widget/listbox.h @@ -31,7 +31,7 @@ #include -class CListBox : public CMenuWidget +class CListBox : public CMenuTarget { protected: CFrameBuffer* frameBuffer; diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index 200afb42e..b973b7eb0 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -19,8 +19,9 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with this program; if not, write to the + Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H @@ -42,6 +43,8 @@ #include +#define ConnectLineBox_Width 16 + /* the following generic menu items are integrated into multiple menus at the same time */ CMenuSeparator CGenericMenuSeparator; CMenuSeparator CGenericMenuSeparatorLine(CMenuSeparator::LINE); @@ -60,7 +63,6 @@ CMenuItem::CMenuItem() directKey = CRCInput::RC_nokey; iconName = ""; iconName_Info_right = ""; - can_arrow = false; used = false; icon_frame_w = 10; hint = NONEXISTANT_LOCALE; @@ -298,6 +300,8 @@ CMenuWidget::CMenuWidget() savescreen = false; background = NULL; preselected = -1; + details_line = NULL; + info_box = NULL; } CMenuWidget::CMenuWidget(const neutrino_locale_t Name, const std::string & Icon, const int mwidth, const mn_widget_id_t &w_index) @@ -321,6 +325,8 @@ void CMenuWidget::Init(const std::string & Icon, const int mwidth, const mn_widg mglobal = CMenuGlobal::getInstance(); //create CMenuGlobal instance only here frameBuffer = CFrameBuffer::getInstance(); iconfile = Icon; + details_line = NULL; + info_box = NULL; //handle select values if(w_index > MN_WIDGET_ID_MAX){ @@ -374,21 +380,9 @@ void CMenuWidget::move(int xoff, int yoff) CMenuWidget::~CMenuWidget() { -#if 0 - for(unsigned int count=0;countsetHint(NEUTRINO_ICON_HINT_BACK, LOCALE_MENU_HINT_BACK); + GenericMenuBack->setHint("", NONEXISTANT_LOCALE); + checkHints(); + if (has_hints) + GenericMenuBack->setHint(NEUTRINO_ICON_HINT_BACK, LOCALE_MENU_HINT_BACK); + if(savescreen) { calcSize(); saveScreen(); @@ -508,93 +506,73 @@ int CMenuWidget::exec(CMenuTarget* parent, const std::string &) do { if(hasItem() && selected >= 0 && (int)items.size() > selected ) - bAllowRepeatLR = items[selected]->can_arrow; + bAllowRepeatLR = items[selected]->isMenueOptionChooser(); g_RCInput->getMsgAbsoluteTimeout(&msg, &data, &timeoutEnd, bAllowRepeatLR); + int handled= false; if ( msg <= CRCInput::RC_MaxRC ) { timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings::TIMING_MENU]); - } - int handled= false; - for (unsigned int i= 0; i< items.size(); i++) { - CMenuItem* titem = items[i]; - if ((titem->directKey != CRCInput::RC_nokey) && (titem->directKey == msg)) { - if (titem->isSelectable()) { - items[selected]->paint( false ); - selected= i; - msg= CRCInput::RC_ok; - } else { - // swallow-key... - handled= true; + for (unsigned int i= 0; i< items.size(); i++) { + CMenuItem* titem = items[i]; + if ((titem->directKey != CRCInput::RC_nokey) && (titem->directKey == msg)) { + if (titem->isSelectable()) { + items[selected]->paint( false ); + selected= i; + msg= CRCInput::RC_ok; + } else { + // swallow-key... + handled= true; + } + break; } - break; } } - if (!handled) { - switch (msg) { - case (NeutrinoMessages::EVT_TIMER): - if(data == fader.GetTimer()) { - if(fader.Fade()) - msg = CRCInput::RC_timeout; - } else { - if ( CNeutrinoApp::getInstance()->handleMsg( msg, data ) & messages_return::cancel_all ) { - retval = menu_return::RETURN_EXIT_ALL; - msg = CRCInput::RC_timeout; - } + if (handled) + continue; + + switch (msg) { + case (NeutrinoMessages::EVT_TIMER): + if(data == fader.GetTimer()) { + if(fader.Fade()) + msg = CRCInput::RC_timeout; + } else { + if ( CNeutrinoApp::getInstance()->handleMsg( msg, data ) & messages_return::cancel_all ) { + retval = menu_return::RETURN_EXIT_ALL; + msg = CRCInput::RC_timeout; } - break; - case (CRCInput::RC_page_up) : - case (CRCInput::RC_page_down) : - if(msg==CRCInput::RC_page_up) { - if(current_page) { - pos = (int) page_start[current_page] - 1; - for (unsigned int count=pos ; count > 0; count--) { - CMenuItem* item = items[pos]; - if ( item->isSelectable() ) { - if ((pos < (int)page_start[current_page + 1]) && (pos >= (int)page_start[current_page])) { - items[selected]->paint( false ); - item->paint( true ); - selected = pos; - } else { - selected=pos; - paintItems(); - } - break; - } - pos--; - } - } else { - pos = 0; - for (unsigned int count=0; count < items.size(); count++) { - CMenuItem* item = items[pos]; - if ( item->isSelectable() ) { - if ((pos < (int)page_start[current_page + 1]) && (pos >= (int)page_start[current_page])) { - items[selected]->paint( false ); - item->paint( true ); - selected = pos; - } else { - selected=pos; - paintItems(); - } - break; - } - pos++; - } - } - } - else if(msg==CRCInput::RC_page_down) { - pos = (int) page_start[current_page + 1];// - 1; - if(pos >= (int) items.size()) - pos = items.size()-1; - for (unsigned int count=pos ; count < items.size(); count++) { + } + break; + case (CRCInput::RC_page_up) : + case (CRCInput::RC_page_down) : + if(msg==CRCInput::RC_page_up) { + if(current_page) { + pos = (int) page_start[current_page] - 1; + for (unsigned int count=pos ; count > 0; count--) { + CMenuItem* item = items[pos]; + if ( item->isSelectable() ) { + if ((pos < (int)page_start[current_page + 1]) && (pos >= (int)page_start[current_page])) { + items[selected]->paint( false ); + item->paint( true ); + selected = pos; + } else { + selected=pos; + paintItems(); + } + break; + } + pos--; + } + } else { + pos = 0; + for (unsigned int count=0; count < items.size(); count++) { CMenuItem* item = items[pos]; if ( item->isSelectable() ) { if ((pos < (int)page_start[current_page + 1]) && (pos >= (int)page_start[current_page])) { items[selected]->paint( false ); item->paint( true ); - paintHint(pos); selected = pos; } else { selected=pos; @@ -605,119 +583,148 @@ int CMenuWidget::exec(CMenuTarget* parent, const std::string &) pos++; } } - break; - case (CRCInput::RC_up) : - case (CRCInput::RC_down) : - { - //search next / prev selectable item - for (unsigned int count=1; count< items.size(); count++) { - if (msg==CRCInput::RC_up) { - pos = selected - count; - if ( pos < 0 ) - pos += items.size(); - } - else if(msg==CRCInput::RC_down) { - pos = (selected+ count)%items.size(); - } - - CMenuItem* item = items[pos]; - - if ( item->isSelectable() ) { - if ((pos < (int)page_start[current_page + 1]) && (pos >= (int)page_start[current_page])) - { // Item is currently on screen - //clear prev. selected - items[selected]->paint( false ); - //select new - item->paint( true ); - paintHint(pos); - selected = pos; - } else { - selected=pos; - paintItems(); - } - break; + } + else if(msg==CRCInput::RC_page_down) { + pos = (int) page_start[current_page + 1];// - 1; + if(pos >= (int) items.size()) + pos = items.size()-1; + for (unsigned int count=pos ; count < items.size(); count++) { + CMenuItem* item = items[pos]; + if ( item->isSelectable() ) { + if ((pos < (int)page_start[current_page + 1]) && (pos >= (int)page_start[current_page])) { + items[selected]->paint( false ); + item->paint( true ); + paintHint(pos); + selected = pos; + } else { + selected=pos; + paintItems(); } + break; } + pos++; } - break; - case (CRCInput::RC_left): - { - CMenuItem* itemX = items[selected]; - int menu_left_exit = (itemX->isMenueOptionChooser() == 1) ? 0 : g_settings.menu_left_exit; - if ((hasItem() && (selected < 0 || !items[selected]->can_arrow)) || - menu_left_exit) { - msg = CRCInput::RC_timeout; + } + break; + case (CRCInput::RC_up) : + case (CRCInput::RC_down) : + { + //search next / prev selectable item + for (unsigned int count=1; count< items.size(); count++) { + if (msg==CRCInput::RC_up) { + pos = selected - count; + if ( pos < 0 ) + pos += items.size(); + } + else if(msg==CRCInput::RC_down) { + pos = (selected+ count)%items.size(); + } + + CMenuItem* item = items[pos]; + + if ( item->isSelectable() ) { + if ((pos < (int)page_start[current_page + 1]) && (pos >= (int)page_start[current_page])) + { // Item is currently on screen + //clear prev. selected + items[selected]->paint( false ); + //select new + item->paint( true ); + paintHint(pos); + selected = pos; + } else { + selected=pos; + paintItems(); + } break; } } - case (CRCInput::RC_right): - case (CRCInput::RC_ok): - { - if(hasItem() && selected > -1 && (int)items.size() > selected) { - //exec this item... - CMenuItem* item = items[selected]; - item->msg = msg; - fader.Stop(); - int rv = item->exec( this ); - switch ( rv ) { - case menu_return::RETURN_EXIT_ALL: - retval = menu_return::RETURN_EXIT_ALL; - case menu_return::RETURN_EXIT: - msg = CRCInput::RC_timeout; - break; - case menu_return::RETURN_REPAINT: - case menu_return::RETURN_EXIT_REPAINT: - paint(); - break; - } - } else - msg = CRCInput::RC_timeout; - } - break; - - case (CRCInput::RC_home): - exit_pressed = true; - msg = CRCInput::RC_timeout; - break; - case (CRCInput::RC_timeout): - break; - - case (CRCInput::RC_sat): - case (CRCInput::RC_favorites): - g_RCInput->postMsg (msg, 0); - //close any menue on dbox-key - case (CRCInput::RC_setup): - { - msg = CRCInput::RC_timeout; - retval = menu_return::RETURN_EXIT_ALL; - } - break; - case (CRCInput::RC_help): - hide(); - g_settings.show_menu_hints = !g_settings.show_menu_hints; - paint(); - break; - - default: - if ( CNeutrinoApp::getInstance()->handleMsg( msg, data ) & messages_return::cancel_all ) { - retval = menu_return::RETURN_EXIT_ALL; - msg = CRCInput::RC_timeout; - } - } - if(msg == CRCInput::RC_timeout) { - if(fade && fader.StartFadeOut()) { - timeoutEnd = CRCInput::calcTimeoutEnd( 1 ); - msg = 0; - continue; } - } + break; + case (CRCInput::RC_left): + { + if(hasItem() && selected > -1 && (int)items.size() > selected) { + CMenuItem* itemX = items[selected]; + if (!itemX->isMenueOptionChooser()) { + if (g_settings.menu_left_exit) + msg = CRCInput::RC_timeout; + break; + } + } + } + case (CRCInput::RC_right): + case (CRCInput::RC_ok): + { + if(hasItem() && selected > -1 && (int)items.size() > selected) { + //exec this item... + CMenuItem* item = items[selected]; + item->msg = msg; + fader.Stop(); + int rv = item->exec( this ); + switch ( rv ) { + case menu_return::RETURN_EXIT_ALL: + retval = menu_return::RETURN_EXIT_ALL; + case menu_return::RETURN_EXIT: + msg = CRCInput::RC_timeout; + break; + case menu_return::RETURN_REPAINT: + case menu_return::RETURN_EXIT_REPAINT: + if (fade && washidden) + fader.StartFadeIn(); + checkHints(); + paint(); + break; + } + } else + msg = CRCInput::RC_timeout; + } + break; - if ( msg <= CRCInput::RC_MaxRC ) - { - // recalculate timeout for RC-keys - timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings::TIMING_MENU]); + case (CRCInput::RC_home): + exit_pressed = true; + msg = CRCInput::RC_timeout; + break; + case (CRCInput::RC_timeout): + break; + + case (CRCInput::RC_sat): + case (CRCInput::RC_favorites): + g_RCInput->postMsg (msg, 0); + //close any menue on dbox-key + case (CRCInput::RC_setup): + { + msg = CRCInput::RC_timeout; + retval = menu_return::RETURN_EXIT_ALL; + } + break; + case (CRCInput::RC_help): + // FIXME should we switch hints in menu without hints ? + checkHints(); + if (has_hints) + hide(); + g_settings.show_menu_hints = !g_settings.show_menu_hints; + if (has_hints) + paint(); + break; + + default: + if ( CNeutrinoApp::getInstance()->handleMsg( msg, data ) & messages_return::cancel_all ) { + retval = menu_return::RETURN_EXIT_ALL; + msg = CRCInput::RC_timeout; + } + } + if(msg == CRCInput::RC_timeout) { + if(fade && fader.StartFadeOut()) { + timeoutEnd = CRCInput::calcTimeoutEnd( 1 ); + msg = 0; + continue; } } + + if ( msg <= CRCInput::RC_MaxRC ) + { + // recalculate timeout for RC-keys + timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings::TIMING_MENU]); + } } while ( msg!=CRCInput::RC_timeout ); hide(); @@ -746,7 +753,6 @@ int CMenuWidget::exec(CMenuTarget* parent, const std::string &) void CMenuWidget::hide() { - //frameBuffer->paintBackgroundBoxRel(x, y, width+15+SHADOW_OFFSET,height+10+SHADOW_OFFSET); if(savescreen && background) restoreScreen();//FIXME else { @@ -757,6 +763,21 @@ void CMenuWidget::hide() /* setActive() paints item for hidden parent menu, if called from child menu */ for (unsigned int count = 0; count < items.size(); count++) items[count]->init(-1, 0, 0, 0); + hint_painted = false; + washidden = true; +} + +void CMenuWidget::checkHints() +{ + GenericMenuBack->setHint("", NONEXISTANT_LOCALE); + for (unsigned int i= 0; i< items.size(); i++) { + if(!items[i]->hintIcon.empty() || items[i]->hint != NONEXISTANT_LOCALE) { + has_hints = true; + break; + } + } + if (has_hints) + GenericMenuBack->setHint(NEUTRINO_ICON_HINT_BACK, LOCALE_MENU_HINT_BACK); } void CMenuWidget::calcSize() @@ -779,14 +800,15 @@ void CMenuWidget::calcSize() int tmpw = items[i]->getWidth() + 10 + 10 + wi; /* 10 pixels to the left and right of the text */ if (tmpw > width) width = tmpw; - - if(g_settings.show_menu_hints && (!items[i]->hintIcon.empty() || items[i]->hint != NONEXISTANT_LOCALE)) { +#if 0 + if(!items[i]->hintIcon.empty() || items[i]->hint != NONEXISTANT_LOCALE) { has_hints = true; } +#endif } hint_height = 0; if(g_settings.show_menu_hints && has_hints) { - int fheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); + int fheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_HINT]->getHeight(); hint_height = 10 + 2*fheight; /* assuming all hint icons has the same size ! */ int iw, ih; @@ -855,8 +877,8 @@ void CMenuWidget::calcSize() if(total_pages > 1) sb_width=15; - full_width = width+sb_width+SHADOW_OFFSET; - full_height = height+RADIUS_LARGE-2+SHADOW_OFFSET+hint_height; + full_width = ConnectLineBox_Width+width+sb_width+SHADOW_OFFSET; + full_height = height+RADIUS_LARGE+SHADOW_OFFSET*2+hint_height+INFO_BOX_Y_OFFSET; setMenuPos(width - sb_width); } @@ -864,25 +886,14 @@ void CMenuWidget::calcSize() void CMenuWidget::paint() { calcSize(); -#if 0 - if(save) - saveScreen(); -#endif - CVFD::getInstance()->setMode(CVFD::MODE_MENU_UTF8, nameString.c_str()); - //clear backround on corners switch - static bool corners = g_settings.rounded_corners; - if(g_settings.rounded_corners != corners){ - corners = g_settings.rounded_corners; - if(!g_settings.rounded_corners){ - frameBuffer->paintBackgroundBoxRel(x, y+full_height, full_width, CORNER_RADIUS_LARGE-2+SHADOW_OFFSET); - } - } + CVFD::getInstance()->setMode(CVFD::MODE_MENU_UTF8 /*, nameString.c_str()*/); - //paint shadow and backround - int rad = RADIUS_LARGE-2; - frameBuffer->paintBoxRel(x+SHADOW_OFFSET ,y + SHADOW_OFFSET ,width + sb_width ,height + rad ,COL_MENUCONTENTDARK_PLUS_0 ,rad); - frameBuffer->paintBoxRel(x ,y ,width + sb_width ,height + rad ,COL_MENUCONTENT_PLUS_0 ,rad); - frameBuffer->paintBoxRel(x ,y ,width + sb_width ,hheight ,COL_MENUHEAD_PLUS_0 ,rad, CORNER_TOP); + // paint shadow + frameBuffer->paintBoxRel(x+SHADOW_OFFSET ,y + SHADOW_OFFSET ,width + sb_width ,height + RADIUS_LARGE ,COL_MENUCONTENTDARK_PLUS_0 ,RADIUS_LARGE); + // paint head + frameBuffer->paintBoxRel(x ,y ,width + sb_width ,hheight ,COL_MENUHEAD_PLUS_0 ,RADIUS_LARGE, CORNER_TOP); + // paint background + frameBuffer->paintBoxRel(x ,y+hheight, width + sb_width, height-hheight + RADIUS_LARGE ,COL_MENUCONTENT_PLUS_0 ,RADIUS_LARGE, CORNER_BOTTOM); //paint menu head int HeadiconOffset = 0; @@ -897,6 +908,7 @@ void CMenuWidget::paint() item_start_y = y+hheight; paintItems(); + washidden = false; } void CMenuWidget::setMenuPos(const int& menu_width) @@ -1026,18 +1038,14 @@ void CMenuWidget::saveScreen() background = new fb_pixel_t [full_width * full_height]; if(background) - frameBuffer->SaveScreen(x, y, full_width, full_height, background); + frameBuffer->SaveScreen(x-ConnectLineBox_Width, y, full_width, full_height, background); } void CMenuWidget::restoreScreen() { if(background) { if(savescreen) - frameBuffer->RestoreScreen(x, y, full_width, full_height, background); -#if 0 - delete[] background; - background = NULL; -#endif + frameBuffer->RestoreScreen(x-ConnectLineBox_Width, y, full_width, full_height, background); } } @@ -1052,77 +1060,69 @@ void CMenuWidget::enableSaveScreen(bool enable) void CMenuWidget::paintHint(int pos) { -#define ConnectLineBox_Width 16 if (!g_settings.show_menu_hints) return; if (pos < 0 && !hint_painted) return; - fb_pixel_t col1 = COL_MENUCONTENT_PLUS_6; - fb_pixel_t col2 = COL_MENUCONTENT_PLUS_1; int rad = RADIUS_LARGE; int xpos = x - ConnectLineBox_Width; - int ypos2 = y + height + rad + SHADOW_OFFSET; - int iwidth = width+sb_width+SHADOW_OFFSET; + int ypos2 = y + height + rad + SHADOW_OFFSET + INFO_BOX_Y_OFFSET; + int iwidth = width+sb_width; if (hint_painted) { - /* clear line box */ - frameBuffer->paintBackgroundBoxRel(xpos, y, ConnectLineBox_Width, height+hint_height+rad); + /* clear detailsline line */ + if (details_line != NULL) + details_line->restore(); /* clear info box */ - frameBuffer->paintBackgroundBoxRel(x, ypos2, iwidth, hint_height); - + if (info_box != NULL) + if (pos == -1) + info_box->restore(); hint_painted = false; } if (pos < 0) return; CMenuItem* item = items[pos]; -printf("paintHint: icon %s text %s\n", item->hintIcon.c_str(), g_Locale->getText(item->hint)); +//printf("paintHint: icon %s text %s\n", item->hintIcon.c_str(), g_Locale->getText(item->hint)); - if (item->hintIcon.empty() && item->hint == NONEXISTANT_LOCALE) + if (item->hintIcon.empty() && item->hint == NONEXISTANT_LOCALE) { + if (info_box != NULL) + info_box->restore(); return; + } hint_painted = true; int iheight = item->getHeight(); + //details line int ypos1 = item->getYPosition(); int ypos1a = ypos1 + (iheight/2)-2; - int ypos2a = ypos2 + (hint_height/2)-2; - + int ypos2a = ypos2 + (hint_height/2) - INFO_BOX_Y_OFFSET; int markh = hint_height > rad*2 ? hint_height - rad*2 : hint_height; - int imarkh = iheight/2; - int imarkoff = iheight/4; + int imarkh = iheight/2+1; + + if (details_line == NULL){ + details_line = new CComponentsDetailLine(xpos, ypos1a, ypos2a, imarkh, markh); + }else{ + details_line->setXPos(xpos); + details_line->setYPos(ypos1a); + details_line->setYPosDown(ypos2a); + details_line->setHMarkDown(markh); + } + details_line->paint(); - /* horizontal item mark - */ - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos1+imarkoff, 4, imarkh, col1); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos1+imarkoff, 1, imarkh, col2); - - /* horizontal info mark - */ - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos2+rad, 4, markh, col1); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos2+rad, 1 , markh, col2); - - /* vertical connect line [ */ - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 4, ypos2a-ypos1a, col1); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 1, ypos2a-ypos1a+4, col2); - - /* vertical item line | */ - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 12, 4, col1); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 12, 1, col2); - - /* vertical info line | */ - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos2a, 12, 4, col1); - frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-12, ypos2a, 8, 1, col2); -#if 0 - /* box shadow */ - frameBuffer->paintBoxRel(x+SHADOW_OFFSET, ypos2+SHADOW_OFFSET, width + sb_width, hint_height, COL_MENUCONTENTDARK_PLUS_0, rad); -#endif - /* box frame and fill */ - frameBuffer->paintBoxFrame(x, ypos2, iwidth, hint_height, 2, col1, rad); - /* box frame and fill */ - frameBuffer->paintBoxRel(x+2, ypos2+2, iwidth-4, hint_height-4, COL_MENUCONTENTDARK_PLUS_0, rad); + if (info_box == NULL) + info_box = new CComponentsInfoBox(x, ypos2, iwidth, hint_height); + else { + info_box->setXPos(x); + info_box->setYPos(ypos2); + info_box->setWidth(iwidth); + } + info_box->paint(); int offset = 10; if (!item->hintIcon.empty()) { @@ -1138,7 +1138,8 @@ printf("paintHint: icon %s text %s\n", item->hintIcon.c_str(), g_Locale->getText if (item->hint == NONEXISTANT_LOCALE) return; - int fheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); + int HintFont = SNeutrinoSettings::FONT_TYPE_MENU_HINT; + int fheight = g_Font[HintFont]->getHeight(); std::string str1, str2; std::string str = g_Locale->getText(item->hint); @@ -1146,13 +1147,61 @@ printf("paintHint: icon %s text %s\n", item->hintIcon.c_str(), g_Locale->getText if (spos != std::string::npos) { str1 = str.substr(0, spos); str2 = str.substr(spos+1); - } else { - str1 = str; } - if (!str1.empty()) - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+offset, ypos2+5+fheight, iwidth-4-offset, str1, COL_MENUCONTENT, 0, true); // UTF-8 - if (!str2.empty()) - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+offset, ypos2+5+fheight*2, iwidth-4-offset, str2, COL_MENUCONTENT, 0, true); // UTF-8 + else + str1 = str; + + if ((!str1.empty()) || (!str1.empty())) { + int wBox = iwidth - 6 - offset; + int wStr1 = 0, wStr2 = 0; + if (!str1.empty()) + wStr1 = g_Font[HintFont]->getRenderWidth(str1); + if (!str2.empty()) + wStr2 = g_Font[HintFont]->getRenderWidth(str2); + if ((wStr1 > wBox) || (wStr2 > wBox)) { + str = g_Locale->getText(item->hint); + // replace "\n" with " " + spos = str.find_first_of("\n"); + if (spos != std::string::npos) + str.replace(spos, 1, " "); + spos = str.length(); + if (spos >= 1) { + std::string BreakChars = "+-/"; + str1 = str; + wStr1 = g_Font[HintFont]->getRenderWidth(str1); + int count = 0; + std::string bChar; + while (wStr1 > wBox) { + spos = str1.find_last_of(BreakChars + " "); + if (spos != std::string::npos) { + str1 = str1.substr(0, spos+1); + // Last delimiter remember if it's not a whitespace + size_t len = str1.length(); + size_t spos2 = str1.find_last_of(BreakChars); + if (len == spos2+1) + bChar = str1.substr(spos2, spos2+1); + else + bChar = ""; + // Remove last delimiter + str1 = str1.substr(0, spos); + } + // Width of string with delimiter + wStr1 = g_Font[HintFont]->getRenderWidth(str1 + bChar); + count++; + if (count > 20) + break; + } + // Last delimiter append again + str1 += bChar; + str2 = str.substr(spos+1); + } + } + ypos2 += (hint_height-fheight*2)/2; + if (!str1.empty()) + g_Font[HintFont]->RenderString(x+offset, ypos2+fheight, wBox, str1, COL_MENUCONTENT, 0, true); // UTF-8 + if (!str2.empty()) + g_Font[HintFont]->RenderString(x+offset, ypos2+fheight*2, wBox, str2, COL_MENUCONTENT, 0, true); // UTF-8 + } } //------------------------------------------------------------------------------------------------------------------------------- @@ -1172,7 +1221,6 @@ CMenuOptionNumberChooser::CMenuOptionNumberChooser(const neutrino_locale_t name, localized_value_name = special_value_name; optionString = non_localized_name; - can_arrow = true; observ = Observ; slider_on = sliderOn; } @@ -1236,7 +1284,6 @@ CMenuOptionChooser::CMenuOptionChooser(const neutrino_locale_t OptionName, int * observ = Observ; directKey = DirectKey; iconName = IconName; - can_arrow = true; pulldown = Pulldown; for (unsigned int i = 0; i < number_of_options; i++) { @@ -1259,7 +1306,6 @@ CMenuOptionChooser::CMenuOptionChooser(const char* OptionName, int * const Optio observ = Observ; directKey = DirectKey; iconName = IconName; - can_arrow = true; pulldown = Pulldown; for (unsigned int i = 0; i < number_of_options; i++) { @@ -1284,7 +1330,6 @@ CMenuOptionChooser::CMenuOptionChooser(const neutrino_locale_t OptionName, int * observ = Observ; directKey = DirectKey; iconName = IconName; - can_arrow = true; pulldown = Pulldown; for (unsigned int i = 0; i < number_of_options; i++) options.push_back(Options[i]); @@ -1303,7 +1348,6 @@ CMenuOptionChooser::CMenuOptionChooser(const char* OptionName, int * const Optio observ = Observ; directKey = DirectKey; iconName = IconName; - can_arrow = true; pulldown = Pulldown; for (unsigned int i = 0; i < number_of_options; i++) options.push_back(Options[i]); @@ -1455,14 +1499,28 @@ int CMenuOptionChooser::getWidth(void) CMenuOptionStringChooser::CMenuOptionStringChooser(const neutrino_locale_t OptionName, char* OptionValue, bool Active, CChangeObserver* Observ, const neutrino_msg_t DirectKey, const std::string & IconName, bool Pulldown) { height = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); - optionName = OptionName; + optionNameString = g_Locale->getText(OptionName); + optionName = OptionName; + active = Active; + optionValue = OptionValue; + observ = Observ; + + directKey = DirectKey; + iconName = IconName; + pulldown = Pulldown; +} + +CMenuOptionStringChooser::CMenuOptionStringChooser(const char* OptionName, char* OptionValue, bool Active, CChangeObserver* Observ, const neutrino_msg_t DirectKey, const std::string & IconName, bool Pulldown) +{ + height = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); + optionNameString = OptionName; + optionName = NONEXISTANT_LOCALE; active = Active; optionValue = OptionValue; observ = Observ; directKey = DirectKey; iconName = IconName; - can_arrow = true; pulldown = Pulldown; } @@ -1494,7 +1552,7 @@ int CMenuOptionStringChooser::exec(CMenuTarget* parent) if (parent) parent->hide(); - CMenuWidget* menu = new CMenuWidget(optionName, NEUTRINO_ICON_SETTINGS); + CMenuWidget* menu = new CMenuWidget(optionNameString.c_str(), NEUTRINO_ICON_SETTINGS); menu->addIntroItems(NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, CMenuWidget::BTN_TYPE_CANCEL); //if(parent) menu->move(20, 0); CMenuSelectorTarget * selector = new CMenuSelectorTarget(&select); @@ -1543,7 +1601,7 @@ int CMenuOptionStringChooser::exec(CMenuTarget* parent) int CMenuOptionStringChooser::paint( bool selected ) { - const char * l_optionName = g_Locale->getText(optionName); + const char * l_optionName = optionNameString.c_str(); //paint item prepareItem(selected, height); @@ -1576,7 +1634,7 @@ CMenuOptionLanguageChooser::~CMenuOptionLanguageChooser() int CMenuOptionLanguageChooser::exec(CMenuTarget*) { - strncpy(g_settings.language, optionValue.c_str(), sizeof(g_settings.language)); + strncpy(g_settings.language, optionValue.c_str(), sizeof(g_settings.language)-1); if(observ) observ->changeNotify(LOCALE_LANGUAGESETUP_SELECT, (void *) optionValue.c_str()); return menu_return::RETURN_EXIT; diff --git a/src/gui/widget/menue.h b/src/gui/widget/menue.h index 3a353444d..1d694afa9 100644 --- a/src/gui/widget/menue.h +++ b/src/gui/widget/menue.h @@ -27,8 +27,9 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with this program; if not, write to the + Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. */ @@ -40,6 +41,7 @@ #include #include #include +#include #include #include @@ -92,7 +94,6 @@ class CMenuItem bool active; neutrino_msg_t directKey; neutrino_msg_t msg; - bool can_arrow; std::string iconName; std::string selected_iconName; std::string iconName_Info_right; @@ -175,6 +176,22 @@ class CMenuSeparator : public CMenuItem void setString(const std::string& text); }; +class CNonLocalizedMenuSeparator : public CMenuSeparator +{ + const char * the_text; + +public: + CNonLocalizedMenuSeparator(const char * ptext, const neutrino_locale_t Text1) : CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, Text1) + { + the_text = ptext; + } + + virtual const char * getString(void) + { + return the_text; + } +}; + class CMenuForwarder : public CMenuItem { const char * option; @@ -338,6 +355,7 @@ class CMenuOptionChooser : public CAbstractMenuOptionChooser class CMenuOptionStringChooser : public CMenuItem { neutrino_locale_t optionName; + std::string optionNameString; int height; char * optionValue; std::vector options; @@ -346,6 +364,8 @@ class CMenuOptionStringChooser : public CMenuItem public: CMenuOptionStringChooser(const neutrino_locale_t OptionName, char* OptionValue, bool Active = false, CChangeObserver* Observ = NULL, const neutrino_msg_t DirectKey = CRCInput::RC_nokey, const std::string & IconName= "", bool Pulldown = false); + CMenuOptionStringChooser(const char* OptionName, char* OptionValue, bool Active = false, CChangeObserver* Observ = NULL, const neutrino_msg_t DirectKey = CRCInput::RC_nokey, const std::string & IconName= "", bool Pulldown = false); + ~CMenuOptionStringChooser(); void addOption(const char * value); @@ -403,6 +423,9 @@ class CMenuWidget : public CMenuTarget private: mn_widget_id_t widget_index; CMenuGlobal *mglobal; + CComponentsDetailLine *details_line; + CComponentsInfoBox *info_box; + protected: std::string nameString; neutrino_locale_t name; @@ -435,9 +458,11 @@ class CMenuWidget : public CMenuTarget bool exit_pressed; bool from_wizard; bool fade; + bool washidden; void Init(const std::string & Icon, const int mwidth, const mn_widget_id_t &w_index); virtual void paintItems(); + void checkHints(); void calcSize(); void saveScreen(); void restoreScreen(); diff --git a/src/gui/widget/mountchooser.cpp b/src/gui/widget/mountchooser.cpp index a5d927709..b205b99d7 100644 --- a/src/gui/widget/mountchooser.cpp +++ b/src/gui/widget/mountchooser.cpp @@ -88,11 +88,12 @@ int CMountChooser::exec(CMenuTarget* parent, const std::string & actionKey) return CMenuWidget::exec(parent, actionKey); } } - +#if 0 +//never used void CMountChooser::setSelectedItem(int selection) { selected = selection; } - +#endif diff --git a/src/gui/widget/stringinput_ext.cpp b/src/gui/widget/stringinput_ext.cpp index ffb5e9ccd..2f80729bc 100644 --- a/src/gui/widget/stringinput_ext.cpp +++ b/src/gui/widget/stringinput_ext.cpp @@ -116,13 +116,21 @@ void CExtendedInput::calculateDialog() hintPosY = height -10; - if (hint_1 != NONEXISTANT_LOCALE) + if (hint_1 != NONEXISTANT_LOCALE) { height += iheight; - if (hint_2 != NONEXISTANT_LOCALE) + int hw = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->getRenderWidth(g_Locale->getText(hint_1), true); + if(width < hw + 40) + width = hw + 40; + } + if (hint_2 != NONEXISTANT_LOCALE) { height += iheight; + int hw = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->getRenderWidth(g_Locale->getText(hint_2), true); + if(width < hw) + width = hw; + } - x = ((frameBuffer->getScreenWidth() - width)>>1); - y = ((frameBuffer->getScreenHeight() - height)>>1); + x = frameBuffer->getScreenX() + ((frameBuffer->getScreenWidth() - width)>>1); + y = frameBuffer->getScreenY() + ((frameBuffer->getScreenHeight() - height)>>1); hintPosY += y; } diff --git a/src/gui/widget/stringinput_ext.h b/src/gui/widget/stringinput_ext.h index eb49b14ad..42b632391 100644 --- a/src/gui/widget/stringinput_ext.h +++ b/src/gui/widget/stringinput_ext.h @@ -99,6 +99,7 @@ class CExtendedInput_Item virtual bool isSelectable(){return true;}; virtual void keyPressed( int /*key*/ ){}; + virtual ~CExtendedInput_Item() {}; }; class CExtendedInput_Item_Spacer : public CExtendedInput_Item @@ -225,8 +226,7 @@ class CIntInput : public CExtendedInput char* getValue() { return myValueStringOutput; } + void updateValue() { onBeforeExec(); } }; - - #endif diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 49fc9a765..63e6c5b25 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -403,6 +403,7 @@ int CNeutrinoApp::loadSetup(const char * fname) g_settings.casystem_display = configfile.getInt32("casystem_display", 2 );//mini ca mode default g_settings.scrambled_message = configfile.getBool("scrambled_message", true ); g_settings.volume_pos = configfile.getInt32("volume_pos", 0 ); + g_settings.volume_digits = configfile.getBool("volume_digits", true); g_settings.menu_pos = configfile.getInt32("menu_pos", CMenuWidget::MENU_POS_CENTER); g_settings.show_menu_hints = configfile.getBool("show_menu_hints", true); g_settings.infobar_show_sysfs_hdd = configfile.getBool("infobar_show_sysfs_hdd" , true ); @@ -845,6 +846,7 @@ void CNeutrinoApp::saveSetup(const char * fname) configfile.setInt32("casystem_display" , g_settings.casystem_display ); configfile.setBool("scrambled_message" , g_settings.scrambled_message ); configfile.setInt32("volume_pos" , g_settings.volume_pos ); + configfile.setBool("volume_digits", g_settings.volume_digits); configfile.setInt32("menu_pos" , g_settings.menu_pos); configfile.setBool("show_menu_hints" , g_settings.show_menu_hints); configfile.setInt32("infobar_show_sysfs_hdd" , g_settings.infobar_show_sysfs_hdd ); @@ -1717,7 +1719,42 @@ void CNeutrinoApp::InitSectiondClient() g_Sectionsd->registerEvent(CSectionsdClient::EVT_WRITE_SI_FINISHED, 222, NEUTRINO_UDS_NAME); } -extern bool timer_wakeup;//timermanager.cpp +#if HAVE_COOL_HARDWARE +#include +#endif + +void wake_up( bool &wakeup) +{ +#if HAVE_COOL_HARDWARE +#ifndef FP_IOCTL_CLEAR_WAKEUP_TIMER +#define FP_IOCTL_CLEAR_WAKEUP_TIMER 10 +#endif + +#define FP_IOCTL_SET_RTC 0x101 +#define FP_IOCTL_GET_RTC 0x102 + + int fd = open("/dev/display", O_RDONLY); + if (fd < 0) { + perror("/dev/display"); + } else { + wakeup_data_t wk; + memset(&wk, 0, sizeof(wk)); + int ret = ioctl(fd, IOC_VFD_GET_WAKEUP, &wk); + if(ret >= 0) + wakeup = ((wk.source == WAKEUP_SOURCE_TIMER) /* || (wk.source == WAKEUP_SOURCE_PWLOST)*/); + close(fd); + } + printf("[timerd] wakeup from standby: %s\n", wakeup ? "yes" : "no"); + if(!wakeup){ + const char *neutrino_leave_deepstandby_script = CONFIGDIR "/deepstandby.off"; + printf("[%s] executing %s\n",__FILE__ ,neutrino_leave_deepstandby_script); + if (system(neutrino_leave_deepstandby_script) != 0) + perror( neutrino_leave_deepstandby_script ); + } +#endif + +} + int CNeutrinoApp::run(int argc, char **argv) { CmdParser(argc, argv); @@ -1786,7 +1823,9 @@ TIMER_START(); g_Zapit->setStandby(false); //timer start - pthread_create (&timer_thread, NULL, timerd_main_thread, (void *) NULL); + bool timer_wakeup = false; + wake_up( timer_wakeup ); + pthread_create (&timer_thread, NULL, timerd_main_thread, (void *) timer_wakeup); init_cec_setting = true; if(!(g_settings.shutdown_timer_record_type && timer_wakeup && g_settings.hdmi_cec_mode)){ @@ -1968,7 +2007,7 @@ void CNeutrinoApp::RealRun(CMenuWidget &mainMenu) } g_RCInput->clearRCMsg(); if(g_settings.power_standby || init_cec_setting) - standbyMode(true); + standbyMode(true, true); InfoClock = CInfoClock::getInstance(); if(g_settings.mode_clock) @@ -2039,32 +2078,24 @@ void CNeutrinoApp::RealRun(CMenuWidget &mainMenu) else if( msg == (neutrino_msg_t) g_settings.key_tvradio_mode ) { switchTvRadioMode(); //used with defined rc key TODO: do we really need this, because we already have a specified key on the remote control } - else if( msg == (neutrino_msg_t) g_settings.key_subchannel_up ) { + else if( msg == (neutrino_msg_t) g_settings.key_subchannel_up || msg == (neutrino_msg_t) g_settings.key_subchannel_down) { if( !g_RemoteControl->subChannels.empty() ) { StopSubtitles(); - g_RemoteControl->subChannelUp(); + if( msg == (neutrino_msg_t) g_settings.key_subchannel_up ) + g_RemoteControl->subChannelUp(); + else if( msg == (neutrino_msg_t) g_settings.key_subchannel_down ) + g_RemoteControl->subChannelDown(); g_InfoViewer->showSubchan(); - } else if (g_settings.mode_left_right_key_tv == SNeutrinoSettings::VOLUME) { + } + else if (g_settings.mode_left_right_key_tv == SNeutrinoSettings::VOLUME) { g_volume->setVolume(msg, true); - } else if((g_settings.mode_left_right_key_tv == SNeutrinoSettings::VZAP) || (g_settings.mode_left_right_key_tv == SNeutrinoSettings::INFOBAR)) { + } + else if((g_settings.mode_left_right_key_tv == SNeutrinoSettings::VZAP) || (g_settings.mode_left_right_key_tv == SNeutrinoSettings::INFOBAR)) { if(channelList->getSize()) { showInfo(); } - } else - quickZap( msg ); - } - else if( msg == (neutrino_msg_t) g_settings.key_subchannel_down ) { - if( !g_RemoteControl->subChannels.empty() ) { - StopSubtitles(); - g_RemoteControl->subChannelDown(); - g_InfoViewer->showSubchan(); - } else if(g_settings.mode_left_right_key_tv == SNeutrinoSettings::VOLUME) { - g_volume->setVolume(msg, true); - } else if((g_settings.mode_left_right_key_tv == SNeutrinoSettings::VZAP) || (g_settings.mode_left_right_key_tv == SNeutrinoSettings::INFOBAR)) { - if(channelList->getSize()) { - showInfo(); - } - } else + } + else quickZap( msg ); } /* in case key_subchannel_up/down redefined */ @@ -2697,7 +2728,7 @@ _repeat: if(data) { skipShutdownTimer = (ShowLocalizedMessage(LOCALE_MESSAGEBOX_INFO, LOCALE_SHUTDOWNTIMER_ANNOUNCE, - CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, true) == CMessageBox::mbrYes);//FIXME + CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, true) == CMessageBox::mbrYes);//FIXME if(skipShutdownTimer) { printf("NeutrinoMessages::SLEEPTIMER: skiping\n"); skipShutdownTimer = false; @@ -2743,7 +2774,7 @@ _repeat: } else if( msg == NeutrinoMessages::ANNOUNCE_SHUTDOWN) { if( mode != mode_scart ) - skipShutdownTimer = (ShowLocalizedMessage(LOCALE_MESSAGEBOX_INFO, LOCALE_SHUTDOWNTIMER_ANNOUNCE, CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 5) == CMessageBox::mbrYes); + skipShutdownTimer = (ShowLocalizedMessage(LOCALE_MESSAGEBOX_INFO, LOCALE_SHUTDOWNTIMER_ANNOUNCE, CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 5) == CMessageBox::mbrYes); } else if( msg == NeutrinoMessages::SHUTDOWN ) { if(!skipShutdownTimer) { @@ -2895,7 +2926,6 @@ void CNeutrinoApp::ExitRun(const bool /*write_si*/, int retcode) //SDTreloadChannels = false; } - CVFD::getInstance()->setMode(CVFD::MODE_SHUTDOWN); delete CRecordManager::getInstance(); @@ -2909,6 +2939,7 @@ void CNeutrinoApp::ExitRun(const bool /*write_si*/, int retcode) if(g_settings.epg_save /* && timeset && g_Sectionsd->getIsTimeSet ()*/) { saveEpg(true);// true CVFD::MODE_SHUTDOWN } + CVFD::getInstance()->setMode(CVFD::MODE_SHUTDOWN); stop_daemons(true /*retcode*/);//need here for timer_is_rec before saveSetup g_settings.shutdown_timer_record_type = timer_is_rec; @@ -3147,7 +3178,7 @@ void CNeutrinoApp::scartMode( bool bOnOff ) } } -void CNeutrinoApp::standbyMode( bool bOnOff ) +void CNeutrinoApp::standbyMode( bool bOnOff, bool fromDeepStandby ) { static bool wasshift = false; INFO("%s", bOnOff ? "ON" : "OFF" ); @@ -3180,9 +3211,9 @@ void CNeutrinoApp::standbyMode( bool bOnOff ) g_Sectionsd->setPauseScanning(true); g_Sectionsd->setServiceChanged(0, false); - if(!CRecordManager::getInstance()->RecordingStatus()) { + if(!CRecordManager::getInstance()->RecordingStatus() ) { //only save epg when not recording - if(g_settings.epg_save) { + if(g_settings.epg_save && !fromDeepStandby) { saveEpg(false);//false CVFD::MODE_STANDBY } } diff --git a/src/neutrino.h b/src/neutrino.h index 34f29b33e..97b483a7c 100644 --- a/src/neutrino.h +++ b/src/neutrino.h @@ -80,6 +80,7 @@ typedef struct font_sizes_groups const unsigned int count; const SNeutrinoSettings::FONT_TYPES * const content; const char * const actionkey; + const neutrino_locale_t hint; } font_sizes_groups_struct; class CNeutrinoApp : public CMenuTarget, CChangeObserver @@ -133,7 +134,7 @@ private: void tvMode( bool rezap = true ); void radioMode( bool rezap = true ); void scartMode( bool bOnOff ); - void standbyMode( bool bOnOff ); + void standbyMode( bool bOnOff, bool fromDeepStandby = false ); void saveEpg(bool cvfd_mode); void ExitRun(const bool write_si = true, int retcode = 0); diff --git a/src/neutrino_menue.cpp b/src/neutrino_menue.cpp index 259b63336..3e8ddce2c 100644 --- a/src/neutrino_menue.cpp +++ b/src/neutrino_menue.cpp @@ -140,6 +140,7 @@ void CNeutrinoApp::InitMenuMain() //tv <-> radio toggle CMenuForwarder *tvradio_switch = new CMenuForwarder(LOCALE_MAINMENU_TVRADIO_SWITCH, true, NULL, this, "tv_radio_switch", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); + tvradio_switch->setHint(NEUTRINO_ICON_HINT_TVRADIO_SWITCH, LOCALE_MENU_HINT_TVRADIO_SWITCH); personalize.addItem(MENU_MAIN, tvradio_switch, &g_settings.personalize[SNeutrinoSettings::P_MAIN_TV_RADIO_MODE]); //tv-mode @@ -266,7 +267,7 @@ void CNeutrinoApp::InitMenuSettings() // miscSettings mf = new CMenuForwarder(LOCALE_MAINSETTINGS_MISC, true, NULL, new CMiscMenue() , NULL, CRCInput::RC_blue , NEUTRINO_ICON_BUTTON_BLUE); - mf->setHint(NEUTRINO_ICON_HINT_EXTENDED, LOCALE_MENU_HINT_EXTENDEED); + mf->setHint(NEUTRINO_ICON_HINT_EXTENDED, LOCALE_MENU_HINT_EXTENDED); personalize.addItem(MENU_SETTINGS, mf, &g_settings.personalize[SNeutrinoSettings::P_MSET_MISC]); //separator diff --git a/src/neutrino_menue.h b/src/neutrino_menue.h index 4f33e72ca..6677e080a 100644 --- a/src/neutrino_menue.h +++ b/src/neutrino_menue.h @@ -163,6 +163,7 @@ enum MN_WIDGET_ID MN_WIDGET_ID_SCAN_AUTO_SCAN_ALL, MN_WIDGET_ID_SCAN_MANUAL_SCAN, MN_WIDGET_ID_SCAN_FAST_SCAN, + MN_WIDGET_ID_SCAN_CABLE_SCAN, MN_WIDGET_ID_MAX }; diff --git a/src/nhttpd/web/Makefile.am b/src/nhttpd/web/Makefile.am index a873fc92a..7a1a58268 100644 --- a/src/nhttpd/web/Makefile.am +++ b/src/nhttpd/web/Makefile.am @@ -61,7 +61,6 @@ install_DATA = channels.js \ Y_Settings_personalize.yhtm \ Y_Settings_Skin.yhtm \ Y_Settings_Timer.yhtm \ - Y_Settings_ucodes.yhtm \ Y_Settings_umount_liste.yhtm \ Y_Settings_video_audio.yhtm \ Y_Settings_VNC.yhtm \ diff --git a/src/nhttpd/web/Y_Blocks.txt b/src/nhttpd/web/Y_Blocks.txt index d438796ca..79995cc78 100644 --- a/src/nhttpd/web/Y_Blocks.txt +++ b/src/nhttpd/web/Y_Blocks.txt @@ -151,7 +151,6 @@ start-block~personalize_save_settings {=ini-set:/var/tuxbox/config/neutrino.conf;personalize_getplugins;{=p_getplugins=}~cache=} {=ini-set:/var/tuxbox/config/neutrino.conf;personalize_restart;{=p_restart=}~cache=} {=ini-set:/var/tuxbox/config/neutrino.conf;personalize_epgrestart;{=p_epgrestart=}~cache=} -{=ini-set:/var/tuxbox/config/neutrino.conf;personalize_ucodecheck;{=p_ucodecheck=}~cache=} {=ini-set:/var/tuxbox/config/neutrino.conf;personalize_chan_epg_stat;{=p_chan_epg_stat=}~cache=} {=ini-set:/var/tuxbox/config/neutrino.conf;personalize_imageinfo;{=p_imageinfo=}~cache=} {=ini-set:/var/tuxbox/config/neutrino.conf;personalize_update;{=p_update=}~cache=} @@ -211,6 +210,11 @@ start-block~management_check_bottom =} end-block~management_check_bottom +# ------- Managemant Link +start-block~management_link +{=var-get:m_link_text=} +end-block~management_link + # ------- Snip: Wait Message Layer-div hidden start-block~snip_wait @@ -380,7 +384,7 @@ start-block~frame_main {=include-block:Y_Blocks.txt;frame_head=} yWeb - + @@ -469,7 +473,7 @@ end-block~frame_ext # ------- Lay-Frame Info-Menu start-block~frame_info {=var-set:sec_menu=Y_Info_Menue.yhtm=} -{=var-set:work=Y_blank.htm=} +{=var-set:work=Y_About.yhtm=} {=include-block:Y_Blocks.txt;frame_secondary=} end-block~frame_info diff --git a/src/nhttpd/web/Y_Boxcontrol_Bouquets.yhtm b/src/nhttpd/web/Y_Boxcontrol_Bouquets.yhtm index 25f3c273e..9ef89d701 100644 --- a/src/nhttpd/web/Y_Boxcontrol_Bouquets.yhtm +++ b/src/nhttpd/web/Y_Boxcontrol_Bouquets.yhtm @@ -5,10 +5,14 @@ {=var-set:help_url=Help-BoxControl-Bouquet=}{=var-set:menu=Bouquet=}{=include-block:Y_Blocks.txt;work_menu=} - + + + scrolling="auto" marginheight="1" marginwidth="1" frameborder="0" name="content" + style="height: 600px; width: 74%; float: right;"> +