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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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 ||
87 option->optionType == Option::TYPE_KEYED_TEXT)
89 for (UINT j = 0; j < option->numChoices; j++)
91 Log::getInstance()->log("Options", Log::DEBUG, "Add option: %s", option->options[j]);
92 ob->addOption(tr(option->options[j]));
95 // Set the selected choice
96 ob->setSelected(tr(option->options[option->configChoice]));
101 ob->setIntMode(option->startInt, option->numChoices);
102 ob->setSelected(option->configChoice);
109 void WOptionPane::deactivateAllControls()
111 if (selectedOption >= 0) {
112 optionBoxes[selectedOption]->setActive(0);
118 int WOptionPane::handleCommand(int command)
125 if (selectedOption > 0)
127 optionBoxes[selectedOption]->setActive(0);
129 optionBoxes[selectedOption]->setActive(1);
134 optionBoxes[selectedOption--]->setActive(0);
135 return 4; // Signal return control to parent
138 case Remote::DF_DOWN:
141 if (selectedOption < (numOptions - 1))
143 if (selectedOption != -1) optionBoxes[selectedOption]->setActive(0);
145 optionBoxes[selectedOption]->setActive(1);
148 else if (selectedOption == (numOptions - 1))
150 optionBoxes[selectedOption]->setActive(0);
152 return 4; // Signal return control to parent
155 case Remote::DF_LEFT:
158 optionBoxes[selectedOption]->left();
161 case Remote::DF_RIGHT:
164 optionBoxes[selectedOption]->right();
169 optionBoxes[selectedOption]->cycle();
177 bool WOptionPane::mouseMove(int x, int y)
180 for (i=0;i<optionBoxes.size();i++) {
181 if (optionBoxes[i]->mouseMove(x,y)) {
182 if ( selectedOption!=(int)i) {
183 if (selectedOption != -1 ) optionBoxes[selectedOption]->setActive(0);
195 bool WOptionPane::mouseLBDOWN(int x, int y)
198 for (i=0;i<optionBoxes.size();i++) {
199 if (optionBoxes[i]->mouseLBDOWN(x,y)) {
200 if ( selectedOption==(int)i) {
201 optionBoxes[selectedOption]->cycle();