summaryrefslogtreecommitdiff
path: root/menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'menu.c')
-rw-r--r--menu.c714
1 files changed, 714 insertions, 0 deletions
diff --git a/menu.c b/menu.c
new file mode 100644
index 0000000..4af4b6e
--- /dev/null
+++ b/menu.c
@@ -0,0 +1,714 @@
+/**
+ * pvrinput plugin for the Video Disk Recorder
+ *
+ * menu.c - setup menu class
+ *
+ * (c) 2005 Andreas Regel <andreas.regel AT powarman.de>
+ **/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ * This program 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 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., *
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
+ * *
+ ***************************************************************************/
+
+/*uncomment the following line to allow setting of PvrSetup.UseOnlyCard
+and StreamType.value via OSD menu (see README) */
+#define PVR_DEBUG
+
+#include "common.h"
+
+static const char * audioBitrateValues[] = {
+ "32",
+ "48",
+ "56",
+ "64",
+ "80",
+ "96",
+ "112",
+ "128",
+ "160",
+ "192",
+ "224",
+ "256",
+ "320",
+ "384"
+};
+
+static const char * bitrateModes[] = {
+ "VBR",
+ "CBR"
+};
+
+/* order must match the 'audmode' values in videodev2.h */
+static const char * tunerAudioModes[] = {
+ "mono",
+ "stereo",
+ "lang2",
+ "lang1",
+ "bilingual"
+};
+#ifdef PVR_DEBUG
+static const char * useOnlyCard[] = {
+ "/dev/video0",
+ "/dev/video1",
+ "/dev/video2",
+ "/dev/video3",
+ "/dev/video4",
+ "/dev/video5",
+ "/dev/video6",
+ "/dev/video7",
+ "all", // 8
+ "PVR150", // 9
+ "PVR250", //10
+ "PVR350", //11
+ "PVR500#1", //12
+ "PVR500#2", //13
+ "HVR1300", //14
+ "HVR1600", //15
+ "HVR1900", //16
+ "HVR1950", //17
+ "PVRUSB2", //18
+ "HDPVR" //19
+ };
+#endif
+static const char * aspectRatios[] = {
+ "1:1",
+ "4:3",
+ "16:9",
+ "2.21:1"
+};
+#ifdef PVR_DEBUG
+static const char * streamType[] = {
+ "MPEG2 PS",
+ "MPEG2 DVD"
+};
+#endif
+static const char * exceptionVolumeForCard[] = {
+ "/dev/video0",
+ "/dev/video1",
+ "/dev/video2",
+ "/dev/video3",
+ "/dev/video4",
+ "/dev/video5",
+ "/dev/video6",
+ "/dev/video7",
+ "-", // 8
+ "PVR150", // 9
+ "PVR250", //10
+ "PVR350", //11
+ "PVR500#1", //12
+ "PVR500#2", //13
+ "HVR1300", //14
+ "HVR1600", //15
+ "HVR1900", //16
+ "HVR1950", //17
+ "PVRUSB2" //18
+ };
+
+cPvrMenuSetup::cPvrMenuSetup() {
+
+ static const char * FilterModes[2];
+ FilterModes[0]=tr("Setup.pvrinput$manual");
+ FilterModes[1]=tr("Setup.pvrinput$auto");
+
+ static const char * SpatialTypes[5];
+ SpatialTypes[0]=tr("Setup.pvrinput$off");
+ SpatialTypes[1]=tr("Setup.pvrinput$1D horizontal");
+ SpatialTypes[2]=tr("Setup.pvrinput$1D vertical");
+ SpatialTypes[3]=tr("Setup.pvrinput$2D hv separable");
+ SpatialTypes[4]=tr("Setup.pvrinput$2D sym non separable");
+
+ static const char * MedianTypes[5];
+ MedianTypes[0]=tr("Setup.pvrinput$off");
+ MedianTypes[1]=tr("Setup.pvrinput$horizontal");
+ MedianTypes[2]=tr("Setup.pvrinput$vertical");
+ MedianTypes[3]=tr("Setup.pvrinput$horizontal + vertical");
+ MedianTypes[4]=tr("Setup.pvrinput$diagonal");
+
+ static const char * SamplingFreqs[3];
+ SamplingFreqs[0]=tr("Setup.pvrinput$44.1 kHz");
+ SamplingFreqs[1]=tr("Setup.pvrinput$48 kHz");
+ SamplingFreqs[2]=tr("Setup.pvrinput$32 kHz");
+
+ static const char * HDPVR_AudioEncodings[2];
+ HDPVR_AudioEncodings[0]=tr("Setup.pvrinput$AAC");
+ HDPVR_AudioEncodings[1]=tr("Setup.pvrinput$AC3");
+
+ static const char * HDPVR_AudioInputs[3];
+ HDPVR_AudioInputs[0]=tr("Setup.pvrinput$RCA back");
+ HDPVR_AudioInputs[1]=tr("Setup.pvrinput$RCA front");
+ HDPVR_AudioInputs[2]=tr("Setup.pvrinput$SPDIF");
+
+ newPvrSetup = PvrSetup;
+ // videobitrate in setup.conf is 0..27000, but ivtv 0..27000000
+ newPvrSetup.VideoBitrateTV.value =
+ (int) (PvrSetup.VideoBitrateTV.value/1000);
+ newPvrSetup.VideoBitrateTV.queryctrl.minimum =
+ (int) (PvrSetup.VideoBitrateTV.queryctrl.minimum/1000);
+ newPvrSetup.VideoBitrateTV.queryctrl.maximum =
+ (int) (PvrSetup.VideoBitrateTV.queryctrl.maximum/1000);
+
+ newPvrSetup.Brightness.value=IntVal2Percent(PvrSetup.Brightness.value,
+ PvrSetup.Brightness.queryctrl.minimum,
+ PvrSetup.Brightness.queryctrl.maximum);
+
+ newPvrSetup.Contrast.value=IntVal2Percent(PvrSetup.Contrast.value,
+ PvrSetup.Contrast.queryctrl.minimum,
+ PvrSetup.Contrast.queryctrl.maximum);
+
+ newPvrSetup.Saturation.value=IntVal2Percent(PvrSetup.Saturation.value,
+ PvrSetup.Saturation.queryctrl.minimum,
+ PvrSetup.Saturation.queryctrl.maximum);
+
+ newPvrSetup.Hue.value=IntVal2Percent(PvrSetup.Hue.value,
+ PvrSetup.Hue.queryctrl.minimum,
+ PvrSetup.Hue.queryctrl.maximum);
+
+ newPvrSetup.AudioVolumeTVCommon.value=IntVal2Percent(PvrSetup.AudioVolumeTVCommon.value,
+ PvrSetup.AudioVolumeTVCommon.queryctrl.minimum,
+ PvrSetup.AudioVolumeTVCommon.queryctrl.maximum);
+
+ newPvrSetup.AudioVolumeTVException.value=IntVal2Percent(PvrSetup.AudioVolumeTVException.value,
+ PvrSetup.AudioVolumeTVException.queryctrl.minimum,
+ PvrSetup.AudioVolumeTVException.queryctrl.maximum);
+
+ newPvrSetup.AudioVolumeFM.value=IntVal2Percent(PvrSetup.AudioVolumeFM.value,
+ PvrSetup.AudioVolumeFM.queryctrl.minimum,
+ PvrSetup.AudioVolumeFM.queryctrl.maximum);
+
+ Add(new cMenuEditBoolItem(tr("Setup.pvrinput$Hide main menu entry"),
+ &newPvrSetup.HideMainMenuEntry));
+#ifdef PVR_DEBUG
+ Add(new cMenuEditStraItem(tr("Setup.pvrinput$Use only card"),
+ &newPvrSetup.UseOnlyCard, 20, useOnlyCard));
+#endif
+ Add(new cMenuEditIntItem(tr("Setup.pvrinput$Log level"),
+ &newPvrSetup.LogLevel, 0, 4));
+
+ Add(new cMenuEditBoolItem(tr("Setup.pvrinput$Slice VBI Teletext"),
+ &newPvrSetup.SliceVBI));
+
+ Add(new cMenuEditStraItem(tr("Setup.pvrinput$Tuner Audio Mode"),
+ &newPvrSetup.TunerAudioMode, 5, tunerAudioModes));
+
+ Add(new cMenuEditIntItem(tr("Setup.pvrinput$Brightness"),
+ &newPvrSetup.Brightness.value, 0, 100));
+
+ Add(new cMenuEditIntItem(tr("Setup.pvrinput$Contrast"),
+ &newPvrSetup.Contrast.value, 0, 100));
+
+ Add(new cMenuEditIntItem(tr("Setup.pvrinput$Saturation"),
+ &newPvrSetup.Saturation.value, 0, 100));
+
+ Add(new cMenuEditIntItem(tr("Setup.pvrinput$Hue"),
+ &newPvrSetup.Hue.value, 0, 100));
+
+ Add(new cMenuEditIntItem(tr("Setup.pvrinput$Common Audio volume (TV)"),
+ &newPvrSetup.AudioVolumeTVCommon.value, 0, 100));
+
+ Add(new cMenuEditIntItem(tr("Setup.pvrinput$Exception Audio volume (TV)"),
+ &newPvrSetup.AudioVolumeTVException.value, 0, 100));
+
+ Add(new cMenuEditStraItem(tr("Setup.pvrinput$Exception TV Volume for Card"),
+ &newPvrSetup.AudioVolumeTVExceptionCard, 19, exceptionVolumeForCard));
+
+ Add(new cMenuEditIntItem(tr("Setup.pvrinput$Audio radio volume"),
+ &newPvrSetup.AudioVolumeFM.value, 0, 100));
+
+ Add(new cMenuEditStraItem(tr("Setup.pvrinput$Audio bitrate (kbit/s)"),
+ &newPvrSetup.AudioBitrate.value,
+ newPvrSetup.AudioBitrate.queryctrl.maximum + 1, audioBitrateValues));
+
+ Add(new cMenuEditStraItem(tr("Setup.pvrinput$Audio sampling rate"),
+ &newPvrSetup.AudioSampling.value,
+ newPvrSetup.AudioSampling.queryctrl.maximum + 1, SamplingFreqs));
+
+ Add(new cMenuEditStraItem(tr("Setup.pvrinput$HDPVR audio encoding"),
+ &newPvrSetup.HDPVR_AudioEncoding.value, 2, HDPVR_AudioEncodings));
+
+ Add(new cMenuEditStraItem(tr("Setup.pvrinput$HDPVR audio input"),
+ &newPvrSetup.HDPVR_AudioInput, 3, HDPVR_AudioInputs));
+
+ Add(new cMenuEditIntItem(tr("Setup.pvrinput$Video bitrate TV (kbit/s)"),
+ &newPvrSetup.VideoBitrateTV.value,
+ newPvrSetup.VideoBitrateTV.queryctrl.minimum,
+ newPvrSetup.VideoBitrateTV.queryctrl.maximum));
+
+ newPvrSetup.StreamType.value=(newPvrSetup.StreamType.value==0?0:1);
+
+ Add(new cMenuEditStraItem(tr("Setup.pvrinput$Bitrate mode"),
+ &newPvrSetup.BitrateMode.value,
+ newPvrSetup.BitrateMode.queryctrl.maximum + 1, bitrateModes));
+
+ Add(new cMenuEditStraItem(tr("Setup.pvrinput$Aspect ratio"),
+ &newPvrSetup.AspectRatio.value,
+ newPvrSetup.AspectRatio.queryctrl.maximum + 1, aspectRatios));
+#ifdef PVR_DEBUG
+ Add(new cMenuEditStraItem(tr("Setup.pvrinput$Stream type"),
+ &newPvrSetup.StreamType.value, 2, streamType));
+#endif
+ Add(new cMenuEditStraItem(tr("Setup.pvrinput$Mode Spatial Video Filter"),
+ &newPvrSetup.FilterSpatialMode.value,
+ newPvrSetup.FilterSpatialMode.queryctrl.maximum + 1, FilterModes));
+
+ Add(new cMenuEditIntItem(tr("Setup.pvrinput$Strength Spatial Video Filter"),
+ &newPvrSetup.FilterSpatial.value,
+ newPvrSetup.FilterSpatial.queryctrl.minimum,
+ newPvrSetup.FilterSpatial.queryctrl.maximum));
+
+ Add(new cMenuEditStraItem(tr("Setup.pvrinput$Luma Spatial Filter Type"),
+ &newPvrSetup.FilterLumaSpatialType.value,
+ newPvrSetup.FilterLumaSpatialType.queryctrl.maximum + 1, SpatialTypes));
+
+ Add(new cMenuEditStraItem(tr("Setup.pvrinput$Chroma Spatial Filter Type"),
+ &newPvrSetup.FilterChromaSpatialType.value,
+ newPvrSetup.FilterChromaSpatialType.queryctrl.maximum + 1, SpatialTypes));
+
+ Add(new cMenuEditStraItem(tr("Setup.pvrinput$Mode Temporal Video Filter"),
+ &newPvrSetup.FilterTemporalMode.value,
+ newPvrSetup.FilterTemporalMode.queryctrl.maximum + 1, FilterModes));
+
+ Add(new cMenuEditIntItem(tr("Setup.pvrinput$Strength Temporal Video Filter"),
+ &newPvrSetup.FilterTemporal.value,
+ newPvrSetup.FilterTemporal.queryctrl.minimum,
+ newPvrSetup.FilterTemporal.queryctrl.maximum));
+
+ Add(new cMenuEditStraItem(tr("Setup.pvrinput$Median Filter Type"),
+ &newPvrSetup.FilterMedianType.value,
+ newPvrSetup.FilterMedianType.queryctrl.maximum + 1, MedianTypes));
+
+ Add(new cMenuEditIntItem(tr("Setup.pvrinput$Luma Median Filter Bottom"),
+ &newPvrSetup.FilterLumaMedianBottom.value,
+ newPvrSetup.FilterLumaMedianBottom.queryctrl.minimum,
+ newPvrSetup.FilterLumaMedianBottom.queryctrl.maximum));
+
+ Add(new cMenuEditIntItem(tr("Setup.pvrinput$Luma Median Filter Top"),
+ &newPvrSetup.FilterLumaMedianTop.value,
+ newPvrSetup.FilterLumaMedianTop.queryctrl.minimum,
+ newPvrSetup.FilterLumaMedianTop.queryctrl.maximum));
+
+ Add(new cMenuEditIntItem(tr("Setup.pvrinput$Chroma Median Filter Bottom"),
+ &newPvrSetup.FilterChromaMedianBottom.value,
+ newPvrSetup.FilterChromaMedianBottom.queryctrl.minimum,
+ newPvrSetup.FilterChromaMedianBottom.queryctrl.maximum));
+
+ Add(new cMenuEditIntItem(tr("Setup.pvrinput$Chroma Median Filter Top"),
+ &newPvrSetup.FilterChromaMedianTop.value,
+ newPvrSetup.FilterChromaMedianTop.queryctrl.minimum,
+ newPvrSetup.FilterChromaMedianTop.queryctrl.maximum));
+
+ Add(new cMenuEditBoolItem(tr("Setup.pvrinput$use externchannelswitch.sh"),
+ &newPvrSetup.UseExternChannelSwitchScript));
+}
+
+void cPvrMenuSetup::Store() {
+ SetupStore("HideMainMenuEntry",
+ PvrSetup.HideMainMenuEntry = newPvrSetup.HideMainMenuEntry);
+
+ SetupStore("UseOnlyCard",
+ PvrSetup.UseOnlyCard = newPvrSetup.UseOnlyCard);
+
+ SetupStore("LogLevel",
+ PvrSetup.LogLevel = newPvrSetup.LogLevel);
+
+ SetupStore("TunerAudioMode",
+ PvrSetup.TunerAudioMode = newPvrSetup.TunerAudioMode);
+
+ SetupStore("StreamType",
+ PvrSetup.StreamType.value = newPvrSetup.StreamType.value);
+
+ SetupStore("AudioVolumeTVExceptionCard",
+ PvrSetup.AudioVolumeTVExceptionCard = newPvrSetup.AudioVolumeTVExceptionCard);
+
+ SetupStore("HDPVR_AudioInput",
+ PvrSetup.HDPVR_AudioInput = newPvrSetup.HDPVR_AudioInput);
+
+ SetupStore("SliceVBI",
+ PvrSetup.SliceVBI = newPvrSetup.SliceVBI);
+
+ SetupStore("UseExternChannelSwitchScript",
+ PvrSetup.UseExternChannelSwitchScript = newPvrSetup.UseExternChannelSwitchScript);
+
+ /* The following code makes sure that we don't write a zero value
+ into setup.conf, which would happen if it is still INVALID_VALUE
+ because no device is present.
+ The macro SETUPSTORE(n,v) is a abbreviation for the 'if .. then' comparison. */
+ #define SETUPSTORE(n, v) if (v.query_isvalid) SetupStore(n, v.value)
+
+ PvrSetup.Brightness.value = Percent2IntVal(newPvrSetup.Brightness.value,
+ PvrSetup.Brightness.queryctrl.minimum,
+ PvrSetup.Brightness.queryctrl.maximum);
+ SETUPSTORE("Brightness", PvrSetup.Brightness);
+
+ PvrSetup.Contrast.value = Percent2IntVal(newPvrSetup.Contrast.value,
+ PvrSetup.Contrast.queryctrl.minimum,
+ PvrSetup.Contrast.queryctrl.maximum);
+ SETUPSTORE("Contrast", PvrSetup.Contrast);
+
+ PvrSetup.Saturation.value = Percent2IntVal(newPvrSetup.Saturation.value,
+ PvrSetup.Saturation.queryctrl.minimum,
+ PvrSetup.Saturation.queryctrl.maximum);
+ SETUPSTORE("Saturation", PvrSetup.Saturation);
+
+ PvrSetup.Hue.value = Percent2IntVal(newPvrSetup.Hue.value,
+ PvrSetup.Hue.queryctrl.minimum,
+ PvrSetup.Hue.queryctrl.maximum);
+ SETUPSTORE("Hue", PvrSetup.Hue);
+
+ PvrSetup.AudioVolumeTVCommon.value = Percent2IntVal(newPvrSetup.AudioVolumeTVCommon.value,
+ PvrSetup.AudioVolumeTVCommon.queryctrl.minimum,
+ PvrSetup.AudioVolumeTVCommon.queryctrl.maximum);
+ SETUPSTORE("AudioVolumeTVCommon", PvrSetup.AudioVolumeTVCommon);
+
+ PvrSetup.AudioVolumeTVException.value = Percent2IntVal(newPvrSetup.AudioVolumeTVException.value,
+ PvrSetup.AudioVolumeTVException.queryctrl.minimum,
+ PvrSetup.AudioVolumeTVException.queryctrl.maximum);
+ SETUPSTORE("AudioVolumeTVException", PvrSetup.AudioVolumeTVException);
+
+ PvrSetup.AudioVolumeFM.value = Percent2IntVal(newPvrSetup.AudioVolumeFM.value,
+ PvrSetup.AudioVolumeFM.queryctrl.minimum,
+ PvrSetup.AudioVolumeFM.queryctrl.maximum);
+ SETUPSTORE("AudioVolumeFM", PvrSetup.AudioVolumeFM);
+
+ // videobitrate in setup.conf is 0..27000, but ivtv 0..27000000
+ PvrSetup.VideoBitrateTV.value = newPvrSetup.VideoBitrateTV.value * 1000;
+ SETUPSTORE("VideoBitrateTV", newPvrSetup.VideoBitrateTV);
+
+ PvrSetup.AudioBitrate.value = newPvrSetup.AudioBitrate.value;
+ SETUPSTORE("AudioBitrate", PvrSetup.AudioBitrate);
+
+ PvrSetup.AudioSampling.value = newPvrSetup.AudioSampling.value;
+ SETUPSTORE("AudioSampling", PvrSetup.AudioSampling);
+
+ // HDPVR audio encoding in setup.conf is 0..1, but driver needs 3..4
+ // if audio input SPDIF is selected, audio encoding must be AAC
+ if (newPvrSetup.HDPVR_AudioInput == 2)
+ newPvrSetup.HDPVR_AudioEncoding.value = 0;
+ PvrSetup.HDPVR_AudioEncoding.value = newPvrSetup.HDPVR_AudioEncoding.value + 3;
+ SETUPSTORE("HDPVR_AudioEncoding", newPvrSetup.HDPVR_AudioEncoding);
+
+ PvrSetup.BitrateMode.value = newPvrSetup.BitrateMode.value;
+ SETUPSTORE("BitrateMode", PvrSetup.BitrateMode);
+
+ PvrSetup.AspectRatio.value = newPvrSetup.AspectRatio.value;
+ SETUPSTORE("AspectRatio", PvrSetup.AspectRatio);
+
+ PvrSetup.FilterSpatialMode.value = newPvrSetup.FilterSpatialMode.value;
+ SETUPSTORE("FilterSpatialMode", PvrSetup.FilterSpatialMode);
+
+ PvrSetup.FilterSpatial.value = newPvrSetup.FilterSpatial.value;
+ SETUPSTORE("FilterSpatial", PvrSetup.FilterSpatial);
+
+ PvrSetup.FilterLumaSpatialType.value = newPvrSetup.FilterLumaSpatialType.value;
+ SETUPSTORE("FilterLumaSpatialType", PvrSetup.FilterLumaSpatialType);
+
+ PvrSetup.FilterChromaSpatialType.value = newPvrSetup.FilterChromaSpatialType.value;
+ SETUPSTORE("FilterChromaSpatialType", PvrSetup.FilterChromaSpatialType);
+
+ PvrSetup.FilterTemporalMode.value = newPvrSetup.FilterTemporalMode.value;
+ SETUPSTORE("FilterTemporalMode", PvrSetup.FilterTemporalMode);
+
+ PvrSetup.FilterTemporal.value = newPvrSetup.FilterTemporal.value;
+ SETUPSTORE("FilterTemporal", PvrSetup.FilterTemporal);
+
+ PvrSetup.FilterMedianType.value = newPvrSetup.FilterMedianType.value;
+ SETUPSTORE("FilterMedianType", PvrSetup.FilterMedianType);
+
+ PvrSetup.FilterLumaMedianBottom.value = newPvrSetup.FilterLumaMedianBottom.value;
+ SETUPSTORE("FilterLumaMedianBottom", PvrSetup.FilterLumaMedianBottom);
+
+ PvrSetup.FilterLumaMedianTop.value = newPvrSetup.FilterLumaMedianTop.value;
+ SETUPSTORE("FilterLumaMedianTop", PvrSetup.FilterLumaMedianTop);
+
+ PvrSetup.FilterChromaMedianBottom.value = newPvrSetup.FilterChromaMedianBottom.value;
+ SETUPSTORE("FilterChromaMedianBottom", PvrSetup.FilterChromaMedianBottom);
+
+ PvrSetup.FilterChromaMedianTop.value = newPvrSetup.FilterChromaMedianTop.value;
+ SETUPSTORE("FilterChromaMedianTop", PvrSetup.FilterChromaMedianTop);
+
+ cPvrDevice::ReInitAll();
+ PvrSetup.repeat_ReInitAll_after_next_encoderstop = true;
+}
+
+
+cPvrMenuMain::cPvrMenuMain(void)
+: cOsdObject(),
+ border(2),
+ margin(4),
+ mode(ePicPropBrightness)
+ {
+ font = cFont::GetFont(fontOsd);
+ width = Setup.OSDWidth;
+ height = 2 * font->Height() + 3 * border + 4 * margin;
+}
+
+cPvrMenuMain::~cPvrMenuMain() {
+ delete osd;
+}
+
+void cPvrMenuMain::Draw(void) {
+
+static const char * pictureProperties[4] = {
+ tr("Setup.pvrinput$Brightness"),
+ tr("Setup.pvrinput$Contrast"),
+ tr("Setup.pvrinput$Saturation"),
+ tr("Setup.pvrinput$Hue")
+ };
+
+ int titleWidth = font->Width(tr(pictureProperties[mode]))
+ + 2 * border + 2 * margin;
+ int titleHeight = font->Height() + border + 2 * margin;
+ int titleStart = 50;
+ int localvalue = PvrSetup.Brightness.value;
+ int localminimum = PvrSetup.Brightness.queryctrl.minimum;
+ int localmaximum = PvrSetup.Brightness.queryctrl.maximum;
+
+ switch (mode) {
+ case ePicPropBrightness:
+ localvalue = PvrSetup.Brightness.value;
+ localminimum = PvrSetup.Brightness.queryctrl.minimum;
+ localmaximum = PvrSetup.Brightness.queryctrl.maximum;
+ break;
+ case ePicPropContrast:
+ localvalue = PvrSetup.Contrast.value;
+ localminimum = PvrSetup.Contrast.queryctrl.minimum;
+ localmaximum = PvrSetup.Contrast.queryctrl.maximum;
+ break;
+ case ePicPropSaturation:
+ localvalue = PvrSetup.Saturation.value;
+ localminimum = PvrSetup.Saturation.queryctrl.minimum;
+ localmaximum = PvrSetup.Saturation.queryctrl.maximum;
+ break;
+ case ePicPropHue:
+ localvalue = PvrSetup.Hue.value;
+ localminimum = PvrSetup.Hue.queryctrl.minimum;
+ localmaximum = PvrSetup.Hue.queryctrl.maximum;
+ break;
+ }
+ int barWidth = (localvalue - localminimum) * (width - font->Width("100%")
+ - 2 * border - 3 * margin) / (localmaximum - localminimum);
+
+ osd->DrawRectangle(0,
+ 0,
+ width - 1,
+ height - 1,
+ clrTransparent);
+ osd->DrawRectangle(0,
+ titleHeight,
+ width - 1,
+ height - 1,
+ clrBlack);
+ osd->DrawRectangle(titleStart,
+ 0,
+ titleStart + titleWidth - 1,
+ titleHeight - 1,
+ clrBlack);
+ osd->DrawText(titleStart + border + margin,
+ border + margin,
+ tr(pictureProperties[mode]),
+ clrWhite,
+ clrBlack,
+ font);
+ osd->DrawRectangle(titleStart,
+ 0,
+ titleStart + titleWidth - 1,
+ border - 1,
+ clrWhite);
+ osd->DrawRectangle(titleStart,
+ 0,
+ titleStart + border - 1,
+ titleHeight - 1,
+ clrWhite);
+ osd->DrawRectangle(titleStart + titleWidth - border,
+ 0,
+ titleStart + titleWidth - 1,
+ titleHeight - 1,
+ clrWhite);
+ osd->DrawRectangle(0,
+ titleHeight,
+ width - 1,
+ titleHeight + border - 1,
+ clrWhite);
+ osd->DrawRectangle(0,
+ titleHeight,
+ border - 1,
+ height - 1,
+ clrWhite);
+ osd->DrawRectangle(0,
+ height - border,
+ width - 1,
+ height - 1,
+ clrWhite);
+ osd->DrawRectangle(width - border,
+ titleHeight,
+ width - 1,
+ height - 1,
+ clrWhite);
+ char strpercentvalue[4];
+ sprintf(strpercentvalue, "%d%%", IntVal2Percent(localvalue,
+ localminimum, localmaximum));
+ osd->DrawText(width - font->Width("100%") - border - margin - 1,
+ border + margin + titleHeight,
+ strpercentvalue,
+ clrWhite,
+ clrBlack,
+ font,
+ font->Width("100%"),
+ 0,
+ taRight);
+ osd->DrawRectangle(border + margin,
+ border + margin + titleHeight,
+ border + margin + barWidth - 1,
+ height - border - margin - 1,
+ clrWhite);
+ osd->Flush();
+}
+
+void cPvrMenuMain::Show(void) {
+ osd = cOsdProvider::NewOsd(Setup.OSDLeft,
+ Setup.OSDTop + Setup.OSDHeight - height);
+
+ tArea area = { 0, 0, width - 1, height - 1, 4 };
+ if (osd->CanHandleAreas(&area, 1) == oeOk)
+ osd->SetAreas(&area, 1);
+
+ Draw();
+}
+
+eOSState cPvrMenuMain::ProcessKey(eKeys Key) {
+ eOSState state = cOsdObject::ProcessKey(Key);
+ if (state == osUnknown) {
+ switch (Key & ~k_Repeat) {
+ case kUp:
+ mode--;
+ if (mode < ePicPropBrightness)
+ mode = ePicPropHue;
+ Draw();
+ break;
+ case kDown:
+ mode++;
+ if (mode > ePicPropHue)
+ mode = ePicPropBrightness;
+ Draw();
+ break;
+ case kLeft:
+ switch (mode) {
+ case ePicPropBrightness:
+ if (PvrSetup.Brightness.value > PvrSetup.Brightness.queryctrl.minimum) {
+ PvrSetup.Brightness.value--;
+ for (int i=0; i<cPvrDevice::Count(); i++) {
+ cPvrDevice * pvr = cPvrDevice::Get(i);
+ if (pvr) pvr->SetControlValue(&PvrSetup.Brightness,
+ PvrSetup.Brightness.value);
+ }
+ }
+ break;
+ case ePicPropContrast:
+ if (PvrSetup.Contrast.value > PvrSetup.Contrast.queryctrl.minimum) {
+ PvrSetup.Contrast.value--;
+ for (int i=0; i<cPvrDevice::Count(); i++) {
+ cPvrDevice * pvr = cPvrDevice::Get(i);
+ if (pvr) pvr->SetControlValue(&PvrSetup.Contrast,
+ PvrSetup.Contrast.value);
+ }
+ }
+ break;
+ case ePicPropSaturation:
+ if (PvrSetup.Saturation.value > PvrSetup.Saturation.queryctrl.minimum) {
+ PvrSetup.Saturation.value--;
+ for (int i=0; i<cPvrDevice::Count(); i++) {
+ cPvrDevice * pvr = cPvrDevice::Get(i);
+ if (pvr) pvr->SetControlValue(&PvrSetup.Saturation,
+ PvrSetup.Saturation.value);
+ }
+ }
+ break;
+ case ePicPropHue:
+ if (PvrSetup.Hue.value > PvrSetup.Hue.queryctrl.minimum) {
+ PvrSetup.Hue.value--;
+ for (int i=0; i<cPvrDevice::Count(); i++) {
+ cPvrDevice * pvr = cPvrDevice::Get(i);
+ if (pvr) pvr->SetControlValue(&PvrSetup.Hue,
+ PvrSetup.Hue.value);
+ }
+ }
+ break;
+ }
+ Draw();
+ break;
+ case kRight:
+ switch (mode)
+ {
+ case ePicPropBrightness:
+ if (PvrSetup.Brightness.value < PvrSetup.Brightness.queryctrl.maximum) {
+ PvrSetup.Brightness.value++;
+ for (int i=0; i<cPvrDevice::Count(); i++) {
+ cPvrDevice * pvr = cPvrDevice::Get(i);
+ if (pvr) pvr->SetControlValue(&PvrSetup.Brightness,
+ PvrSetup.Brightness.value);
+ }
+ }
+ break;
+ case ePicPropContrast:
+ if (PvrSetup.Contrast.value < PvrSetup.Contrast.queryctrl.maximum) {
+ PvrSetup.Contrast.value++;
+ for (int i=0; i<cPvrDevice::Count(); i++) {
+ cPvrDevice * pvr = cPvrDevice::Get(i);
+ if (pvr) pvr->SetControlValue(&PvrSetup.Contrast,
+ PvrSetup.Contrast.value);
+ }
+ }
+ break;
+ case ePicPropSaturation:
+ if (PvrSetup.Saturation.value < PvrSetup.Saturation.queryctrl.maximum) {
+ PvrSetup.Saturation.value++;
+ for (int i=0; i<cPvrDevice::Count(); i++) {
+ cPvrDevice * pvr = cPvrDevice::Get(i);
+ if (pvr) pvr->SetControlValue(&PvrSetup.Saturation,
+ PvrSetup.Saturation.value);
+ }
+ }
+ break;
+ case ePicPropHue:
+ if (PvrSetup.Hue.value < PvrSetup.Hue.queryctrl.maximum) {
+ PvrSetup.Hue.value++;
+ for (int i=0; i<cPvrDevice::Count(); i++) {
+ cPvrDevice * pvr = cPvrDevice::Get(i);
+ if (pvr) pvr->SetControlValue(&PvrSetup.Hue,
+ PvrSetup.Hue.value);
+ }
+ }
+ break;
+ }
+ Draw();
+ break;
+ case kOk:
+ PluginPvrInput->SetupStore("Brightness", PvrSetup.Brightness.value);
+ PluginPvrInput->SetupStore("Contrast", PvrSetup.Contrast.value);
+ PluginPvrInput->SetupStore("Saturation", PvrSetup.Saturation.value);
+ PluginPvrInput->SetupStore("Hue", PvrSetup.Hue.value);
+ return osEnd;
+ case kBack:
+ return osEnd;
+ default:
+ return state;
+ }
+ state = osContinue;
+ }
+ return state;
+}
+