2 Copyright 2007 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 "woptionpane.h"
24 #include "woptionbox.h"
30 WOptionPane::WOptionPane()
36 WOptionPane::~WOptionPane()
38 for(int i = 0; i < numOptions; i++)
41 delete optionBoxes[i];
45 void WOptionPane::draw()
48 drawText(tr("Press back to exit, <, > or [ok] to change"), 10, area.h - 30, Colour::LIGHTTEXT);
51 void WOptionPane::saveOpts()
53 // Due to the way the pane is constructed, options[0] corresponds to textBoxes[0] and optionBoxes[0] etc
55 for(int i = 0; i < numOptions; i++)
57 options[i]->userSetChoice = optionBoxes[i]->getSelectedIndex();
61 void WOptionPane::addOptionLine(Option* option)
63 int fontHeight = surface->getFontHeight();
65 options.resize(numOptions+1);
66 options[numOptions] = option;
68 WTextbox* tb = new WTextbox();
69 tb->setPosition(4, 4 + (numOptions * 30));
70 tb->setSize(300, fontHeight);
71 tb->setText(tr(option->displayText));
75 textBoxes.resize(numOptions+1);
76 textBoxes[numOptions] = tb;
78 WOptionBox* ob = new WOptionBox();
79 ob->setPosition(310, 4 + (numOptions * 30));
80 ob->setSize(190, fontHeight);
83 optionBoxes.resize(numOptions+1);
84 optionBoxes[numOptions] = ob;
86 if (option->optionType == Option::TYPE_TEXT)
88 for (UINT j = 0; j < option->numChoices; j++)
90 Log::getInstance()->log("Options", Log::DEBUG, "Add option: %s", option->options[j]);
91 ob->addOption(tr(option->options[j]));
94 // Set the selected choice
95 ob->setSelected(tr(option->options[option->configChoice]));
100 ob->setIntMode(option->startInt, option->numChoices);
101 ob->setSelected(option->configChoice);
108 void WOptionPane::deactivateAllControls()
110 if (selectedOption >= 0) {
111 optionBoxes[selectedOption]->setActive(0);
117 int WOptionPane::handleCommand(int command)
124 if (selectedOption > 0)
126 optionBoxes[selectedOption]->setActive(0);
128 optionBoxes[selectedOption]->setActive(1);
133 optionBoxes[selectedOption--]->setActive(0);
134 return 4; // Signal return control to parent
137 case Remote::DF_DOWN:
140 if (selectedOption < (numOptions - 1))
142 if (selectedOption != -1) optionBoxes[selectedOption]->setActive(0);
144 optionBoxes[selectedOption]->setActive(1);
147 else if (selectedOption == (numOptions - 1))
149 optionBoxes[selectedOption]->setActive(0);
151 return 4; // Signal return control to parent
154 case Remote::DF_LEFT:
157 optionBoxes[selectedOption]->left();
160 case Remote::DF_RIGHT:
163 optionBoxes[selectedOption]->right();
168 optionBoxes[selectedOption]->cycle();
176 bool WOptionPane::mouseMove(int x, int y)
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);
194 bool WOptionPane::mouseLBDOWN(int x, int y)
197 for (i=0;i<optionBoxes.size();i++) {
198 if (optionBoxes[i]->mouseLBDOWN(x,y)) {
199 if ( selectedOption==(int)i) {
200 optionBoxes[selectedOption]->cycle();