2 Copyright 2004-2005 Chris Tallon
4 This file is part of VOMP.
6 VOMP is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 VOMP is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with VOMP; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #include "voptionsmenu.h"
23 VOptionsMenu::VOptionsMenu()
25 viewman = ViewMan::getInstance();
28 if (Video::getInstance()->getFormat() == Video::PAL)
30 setScreenPos(140, 170);
34 setScreenPos(130, 140);
37 setBackgroundColour(Colour::VIEWBACKGROUND);
39 setTitleBarColour(Colour::TITLEBARBACKGROUND);
40 setTitleText(tr("Options"));
42 int fontHeight = surface->getFontHeight();
48 wb->setText("General");
49 wb->setSurface(surface);
50 wb->setSurfaceOffset(160, 60);
51 wb->setDimensions(140, fontHeight);
53 buttons.push_back(wb);
56 wb->setText("Timers");
57 wb->setSurface(surface);
58 wb->setSurfaceOffset(160, 100);
59 wb->setDimensions(140, fontHeight);
61 buttons.push_back(wb);
64 wb->setText("Advanced");
65 wb->setSurface(surface);
66 wb->setSurfaceOffset(160, 140);
67 wb->setDimensions(140, fontHeight);
69 buttons.push_back(wb);
72 selectedButton = buttons.begin();
73 (*selectedButton)->setActive(1);
76 VOptionsMenu::~VOptionsMenu()
78 while (!buttons.empty())
80 delete buttons.back();
85 void VOptionsMenu::draw()
89 vector<WButton*>::iterator i;
90 for(i = buttons.begin(); i != buttons.end(); i++)
96 int VOptionsMenu::handleCommand(int command)
103 if (selectedButton == buttons.begin()) return 2;
104 (*selectedButton)->setActive(0);
106 (*selectedButton)->setActive(1);
107 draw(); // fixme - just draw buttons
108 viewman->updateView(this);
111 case Remote::DF_DOWN:
114 if (selectedButton == (buttons.end() - 1)) return 2;
115 (*selectedButton)->setActive(0);
117 (*selectedButton)->setActive(1);
118 draw(); // fixme - just draw buttons
119 viewman->updateView(this);
128 switch((*selectedButton)->getTag())
130 case 1: doGeneral(); break;
131 case 2: doTimers(); break;
132 case 3: doAdvanced(); break;
141 void VOptionsMenu::processMessage(Message* m)
143 if (m->message == Message::CHANGED_OPTIONS)
145 doApplyChanges((map<int,int>*)m->parameter);
146 viewman->removeView(this);
150 void VOptionsMenu::doApplyChanges(map<int,int>* changedOptions)
152 Video* video = Video::getInstance();
153 map<int,int>::iterator i;
155 for(i = changedOptions->begin(); i != changedOptions->end(); i++)
157 printf("I FIRST = %i SECOND = %i\n", i->first, i->second);
165 Log::getInstance()->log("Options", Log::DEBUG, "Setting New Remote");
166 Remote::getInstance()->setRemoteType(Remote::NEWREMOTE);
170 Log::getInstance()->log("Options", Log::DEBUG, "Setting Old Remote");
171 Remote::getInstance()->setRemoteType(Remote::OLDREMOTE);
178 VWelcome::getInstance()->redrawLang();
185 Log::getInstance()->log("Options", Log::DEBUG, "Setting S-Video");
186 video->setConnection(Video::SVIDEO);
190 Log::getInstance()->log("Options", Log::DEBUG, "Setting RGB/Composite");
191 video->setConnection(Video::COMPOSITERGB);
199 Log::getInstance()->log("Options", Log::DEBUG, "Setting 16:9 TV");
200 video->setTVsize(Video::ASPECT16X9);
204 Log::getInstance()->log("Options", Log::DEBUG, "Setting 4:3 TV");
205 video->setTVsize(Video::ASPECT4X3);
213 Log::getInstance()->log("Options", Log::DEBUG, "Setting letterbox");
214 video->setMode(Video::LETTERBOX);
218 Log::getInstance()->log("Options", Log::DEBUG, "Setting chop-sides");
219 video->setMode(Video::NORMAL);
225 size_t newTCPsize = 2048;
227 if (i->second == 0) newTCPsize = 1024;
228 else if (i->second == 1) newTCPsize = 2048;
229 else if (i->second == 2) newTCPsize = 4096;
230 else if (i->second == 3) newTCPsize = 8192;
231 else if (i->second == 4) newTCPsize = 16384;
232 else if (i->second == 5) newTCPsize = 32768;
233 else if (i->second == 6) newTCPsize = 65536;
235 Log::getInstance()->log("Options", Log::DEBUG, "Setting TCP window size %i", newTCPsize);
236 VDR::getInstance()->setReceiveWindow(newTCPsize);
242 delete changedOptions;
246 void VOptionsMenu::doGeneral()
248 static const int numOptions = 7;
250 static const char* options1[] = {"Old", "New"};
251 static const char* options3[] = {"RGB+composite", "S-Video"};
252 static const char* options4[] = {"4:3", "16:9"};
253 static const char* options5[] = {"Chop sides", "Letterbox"};
254 static const char* options6[] = {"On", "Off", "Last state"};
255 static const char* options7[] = {"All", "FTA only"};
257 const static OPTIONDATA optionData[numOptions] =
259 {1, "Remote control type", "General", "Remote type", OPTIONTYPE_TEXT, 2, 0, 0, options1 },
260 {2, "Language", "General", "Language", OPTIONTYPE_TEXT, I18n::NumLanguages, 0, 0, I18n::Languages },
261 {3, "TV connection type", "TV", "Connection", OPTIONTYPE_TEXT, 2, 0, 0, options3 },
262 {4, "TV aspect ratio", "TV", "Aspect", OPTIONTYPE_TEXT, 2, 0, 0, options4 },
263 {5, "16:9 on 4:3 display mode", "TV", "Widemode", OPTIONTYPE_TEXT, 2, 0, 0, options5 },
264 {6, "Power state after bootup", "General", "Power After Boot", OPTIONTYPE_TEXT, 3, 0, 0, options6 },
265 {7, "Display channels", "General", "Channels", OPTIONTYPE_TEXT, 2, 0, 0, options7 },
268 // As all the above data is const static, it can be sent to the new View, this stack frame can
269 // quit and the pointers will all still be valid. I think. (Hope).
271 VOptions* v = new VOptions(this, tr("General Options"), optionData, numOptions);
274 viewman->updateView(v);
278 void VOptionsMenu::doTimers()
280 static const int numOptions = 4;
282 const static OPTIONDATA optionData[numOptions] =
284 {9, "Default start margin (minutes)", "Timers", "Start margin", OPTIONTYPE_INT, 20, 5, 0, NULL },
285 {10, "Default end margin (minutes)", "Timers", "End margin", OPTIONTYPE_INT, 20, 5, 0, NULL },
286 {11, "Default priority", "Timers", "Priority", OPTIONTYPE_INT, 100, 99, 0, NULL },
287 {12, "Default lifetime", "Timers", "Lifetime", OPTIONTYPE_INT, 100, 99, 0, NULL },
290 // As all the above data is const static, it can be sent to the new View, this stack frame can
291 // quit and the pointers will all still be valid. I think. (Hope).
293 VOptions* v = new VOptions(this, tr("Timer Options"), optionData, numOptions);
296 viewman->updateView(v);
299 void VOptionsMenu::doAdvanced()
301 static const int numOptions = 2;
303 static const char* options13[] = {"1024", "2048", "4096", "8192", "16384", "32768", "65536"};
305 const static OPTIONDATA optionData[numOptions] =
307 {8, "VDR-Pri 0=OK !See forums!", "General", "Live priority", OPTIONTYPE_INT, 100, 0, 0, NULL },
308 {13, "TCP receive window size", "Advanced", "TCP receive window", OPTIONTYPE_TEXT, 7, 1, 0, options13 }
311 // As all the above data is const static, it can be sent to the new View, this stack frame can
312 // quit and the pointers will all still be valid. I think. (Hope).
314 VOptions* v = new VOptions(this, tr("Advanced Options"), optionData, numOptions);
317 viewman->updateView(v);