]> git.vomp.tv Git - vompclient.git/blob - woptionpane.cc
Fix for power after boot fail
[vompclient.git] / woptionpane.cc
1 /*
2     Copyright 2007 Chris Tallon
3
4     This file is part of VOMP.
5
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.
10
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.
15
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
19 */
20
21 #include "woptionpane.h"
22 #include "wtextbox.h"
23 #include "i18n.h"
24 #include "woptionbox.h"
25 #include "log.h"
26 #include "vdr.h"
27 #include "remote.h"
28 #include "option.h"
29
30 WOptionPane::WOptionPane()
31 {
32   numOptions = 0;
33   selectedOption = -1;
34 }
35
36 WOptionPane::~WOptionPane()
37 {
38   for(int i = 0; i < numOptions; i++)
39   {
40     delete textBoxes[i];
41     delete optionBoxes[i];
42   }
43 }
44
45 void WOptionPane::draw()
46 {
47   Boxx::draw();
48   drawText(tr("Press back to exit, <, > or [ok] to change"), 10, area.h - 30, Colour::LIGHTTEXT);
49 }
50
51 void WOptionPane::saveOpts()
52 {
53   // Due to the way the pane is constructed, options[0] corresponds to textBoxes[0] and optionBoxes[0] etc
54   
55   for(int i = 0; i < numOptions; i++)
56   {
57     options[i]->userSetChoice = optionBoxes[i]->getSelectedIndex();
58   }
59 }
60
61 void WOptionPane::addOptionLine(Option* option)
62 {
63   int fontHeight = surface->getFontHeight();
64
65   options.resize(numOptions+1);
66   options[numOptions] = option;
67   
68   WTextbox* tb = new WTextbox();
69   tb->setPosition(4, 4 + (numOptions * 30));
70   tb->setSize(300, fontHeight);
71   tb->setText(tr(option->displayText));
72   tb->setTextPos(0, 0);
73   add(tb);
74   
75   textBoxes.resize(numOptions+1);
76   textBoxes[numOptions] = tb;
77
78   WOptionBox* ob = new WOptionBox();
79   ob->setPosition(310, 4 + (numOptions * 30));
80   ob->setSize(190, fontHeight);  
81   add(ob);
82   
83   optionBoxes.resize(numOptions+1);
84   optionBoxes[numOptions] = ob;
85   
86   if (option->optionType == Option::TYPE_TEXT)
87   {
88     for (UINT j = 0; j < option->numChoices; j++)
89     {
90       Log::getInstance()->log("Options", Log::DEBUG, "Add option: %s", option->options[j]);
91       ob->addOption(tr(option->options[j]));
92     }
93
94     // Set the selected choice
95     ob->setSelected(tr(option->options[option->configChoice]));
96   }
97   else
98   {
99     // int mode
100     ob->setIntMode(option->startInt, option->numChoices);
101     ob->setSelected(option->configChoice);
102   }
103
104   numOptions++;
105   
106 }
107
108 void WOptionPane::deactivateAllControls()
109 {
110     if (selectedOption >= 0) {
111         optionBoxes[selectedOption]->setActive(0);
112         selectedOption = -1;
113     }
114 }
115
116
117 int WOptionPane::handleCommand(int command)
118 {
119   switch(command)
120   {
121     case Remote::DF_UP:
122     case Remote::UP:
123     {
124       if (selectedOption > 0)
125       {
126         optionBoxes[selectedOption]->setActive(0);
127         --selectedOption;
128         optionBoxes[selectedOption]->setActive(1);
129         return 1;
130       }
131       else
132       {
133         optionBoxes[selectedOption--]->setActive(0);
134         return 4; // Signal return control to parent
135       }
136     }
137     case Remote::DF_DOWN:
138     case Remote::DOWN:
139     {
140       if (selectedOption < (numOptions - 1))
141       {
142         if (selectedOption != -1) optionBoxes[selectedOption]->setActive(0);
143         ++selectedOption;
144         optionBoxes[selectedOption]->setActive(1);
145         return 1;
146       }
147       else if (selectedOption == (numOptions - 1))
148       {
149         optionBoxes[selectedOption]->setActive(0);
150         selectedOption = -1;
151         return 4; // Signal return control to parent
152       }
153     }
154     case Remote::DF_LEFT:
155     case Remote::LEFT:
156     {
157       optionBoxes[selectedOption]->left();
158       return 1;
159     }
160     case Remote::DF_RIGHT:
161     case Remote::RIGHT:
162     {
163       optionBoxes[selectedOption]->right();
164       return 1;
165     }
166     case Remote::OK:
167     {
168       optionBoxes[selectedOption]->cycle();
169       return 1;
170     }
171   }
172
173   return 0;
174 }
175
176 bool WOptionPane::mouseMove(int x, int y)
177 {
178     UINT i;
179     for (i=0;i<optionBoxes.size();i++) {
180         if (optionBoxes[i]->mouseMove(x,y)) {
181             if ( selectedOption!=(int)i) {
182                 if (selectedOption != -1 ) optionBoxes[selectedOption]->setActive(0);
183                 selectedOption=i;
184                 return true;
185             } else {
186                 return false;
187             }
188         }
189     }
190
191     return false;
192 }
193
194 bool WOptionPane::mouseLBDOWN(int x, int y)
195 {
196     UINT i;
197     for (i=0;i<optionBoxes.size();i++) {
198         if (optionBoxes[i]->mouseLBDOWN(x,y)) {
199             if ( selectedOption==(int)i) {
200                 optionBoxes[selectedOption]->cycle();
201                 return true;
202             } else {
203                 return false;
204             }
205         }
206     }
207     return false;
208 }
209
210
211
212