Merge from development branch heightmap to main.
[scorched3d.git] / src / client / GLW / GLWOptionEntry.cpp
blobf77dec210d261d7c57e2633ff35fa2bedf5c1913
1 ////////////////////////////////////////////////////////////////////////////////
2 // Scorched3D (c) 2000-2004
3 //
4 // This file is part of Scorched3D.
5 //
6 // Scorched3D 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 // Scorched3D 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 Scorched3D; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 ////////////////////////////////////////////////////////////////////////////////
21 #include <GLW/GLWOptionEntry.h>
22 #include <GLW/GLWLabel.h>
23 #include <GLW/GLWPanel.h>
24 #include <GLW/GLWCheckBox.h>
25 #include <GLW/GLWDropDownText.h>
26 #include <GLW/GLWTextBox.h>
27 #include <engine/ModDirs.h>
28 #include <common/Defines.h>
29 #include <common/ToolTip.h>
31 GLWOptionEntry::GLWOptionEntry(GLWidget *control, OptionEntry *entry) :
32 control_(control), entry_(entry)
36 GLWOptionEntry::~GLWOptionEntry()
40 void GLWOptionEntry::createEntry(
41 std::list<GLWOptionEntry> &controls,
42 GLWPanel *parent, OptionEntry &entry)
44 std::string descriptionName;
45 descriptionName.append(entry.getName()).append("_description");
47 GLWLabel *staticText = new GLWLabel(0.0f, 0.0f,
48 LANG_RESOURCE(entry.getName(), entry.getName()));
49 staticText->setToolTip(new ToolTip(ToolTip::ToolTipHelp,
50 LANG_RESOURCE(entry.getName(), entry.getName()),
51 LANG_RESOURCE(descriptionName, entry.getDescription())));
52 parent->addWidget(staticText, 0, GLWPanel::AlignRight |
53 GLWPanel::SpaceLeft | GLWPanel::SpaceTop, 10.0f);
55 GLWidget *control = 0;
56 if (0 == strcmp(entry.getName(), "Mod"))
58 control = new GLWDropDownText(0.0f, 0.0f, 170.0f);
59 ModDirs modDirs;
60 modDirs.loadModDirs();
61 std::list<ModInfo>::iterator itor;
62 for (itor = modDirs.getDirs().begin();
63 itor != modDirs.getDirs().end();
64 itor++)
66 ModInfo &info = (*itor);
67 ((GLWDropDownText *) control)->addText(
68 LANG_RESOURCE(info.getName(), info.getName()), info.getName());
71 else
72 switch (entry.getEntryType())
74 case OptionEntry::OptionEntryStringType:
76 control = new GLWTextBox(0.0f, 0.0f, 170.0f);
78 break;
79 case OptionEntry::OptionEntryBoundedIntType:
81 control = new GLWDropDownText(0.0f, 0.0f, 170.0f);
82 OptionEntryBoundedInt &boundedInt = (OptionEntryBoundedInt &) entry;
83 for (int i=boundedInt.getMinValue();
84 i<=boundedInt.getMaxValue();
85 i+=boundedInt.getStepValue())
87 std::string value = S3D::formatStringBuffer("%i", i);
88 ((GLWDropDownText *) control)->addText(LANG_STRING(value), value);
91 break;
92 case OptionEntry::OptionEntryEnumType:
94 control = new GLWDropDownText(0.0f, 0.0f, 170.0f);
96 OptionEntryEnum &optionEntryEnum = (OptionEntryEnum &) entry;
97 OptionEntryEnum::EnumEntry *enums = optionEntryEnum.getEnums();
98 for (OptionEntryEnum::EnumEntry *current = enums; current->description[0]; current++)
100 ((GLWDropDownText *) control)->addEntry(
101 GLWSelectorEntry(LANG_RESOURCE(current->description, current->description),
102 0, false, 0, (void *) current->value, current->description));
105 break;
106 case OptionEntry::OptionEntryStringEnumType:
108 control = new GLWDropDownText(0.0f, 0.0f, 170.0f);
110 OptionEntryStringEnum &optionEntryStringEnum = (OptionEntryStringEnum &) entry;
111 OptionEntryStringEnum::EnumEntry *enums = optionEntryStringEnum.getEnums();
112 for (OptionEntryStringEnum::EnumEntry *current = enums; current->value[0]; current++)
114 ((GLWDropDownText *) control)->addText(LANG_RESOURCE(current->value, current->value),
115 current->value);
118 break;
119 case OptionEntry::OptionEntryBoolType:
121 control = new GLWCheckBox();
123 break;
124 default:
125 S3D::dialogExit("GLWOptionEntry::createEntry",
126 S3D::formatStringBuffer("Unhandled OptionEntry type %s:%i",
127 entry.getName(), entry.getEntryType()));
130 control->setToolTip(new ToolTip(ToolTip::ToolTipHelp,
131 LANG_RESOURCE(entry.getName(), entry.getName()),
132 LANG_RESOURCE(descriptionName, entry.getDescription())));
133 parent->addWidget(control, 0,
134 GLWPanel::SpaceRight | GLWPanel::SpaceLeft | GLWPanel::SpaceTop, 10.0f);
136 controls.push_back(GLWOptionEntry(control, &entry));
139 void GLWOptionEntry::updateControls(
140 std::list<GLWOptionEntry> &controls)
142 std::list<GLWOptionEntry>::iterator itor;
143 for (itor = controls.begin();
144 itor != controls.end();
145 itor++)
147 GLWOptionEntry &entrySetter = *itor;
149 if (0 == strcmp(entrySetter.getEntry()->getName(), "Mod"))
151 GLWDropDownText *control = (GLWDropDownText *) entrySetter.getControl();
152 control->setCurrentText(LANG_RESOURCE(entrySetter.getEntry()->getValueAsString(),
153 entrySetter.getEntry()->getValueAsString()));
155 else
156 switch (entrySetter.getEntry()->getEntryType())
158 case OptionEntry::OptionEntryStringType:
160 GLWTextBox *control = (GLWTextBox *) entrySetter.getControl();
161 control->setText(LANG_STRING(entrySetter.getEntry()->getValueAsString()));
163 break;
164 case OptionEntry::OptionEntryBoundedIntType:
166 GLWDropDownText *control = (GLWDropDownText *) entrySetter.getControl();
167 control->setCurrentText(LANG_STRING(entrySetter.getEntry()->getValueAsString()));
169 break;
170 case OptionEntry::OptionEntryEnumType:
171 case OptionEntry::OptionEntryStringEnumType:
173 GLWDropDownText *control = (GLWDropDownText *) entrySetter.getControl();
174 control->setCurrentText(LANG_RESOURCE(entrySetter.getEntry()->getValueAsString(),
175 entrySetter.getEntry()->getValueAsString()));
177 break;
178 case OptionEntry::OptionEntryBoolType:
180 OptionEntryBool *boolEntry = (OptionEntryBool *) entrySetter.getEntry();
181 GLWCheckBox *control = (GLWCheckBox *) entrySetter.getControl();
182 control->setState(boolEntry->getValue());
184 break;
189 void GLWOptionEntry::updateEntries(
190 std::list<GLWOptionEntry> &controls)
192 std::list<GLWOptionEntry>::iterator itor;
193 for (itor = controls.begin();
194 itor != controls.end();
195 itor++)
197 GLWOptionEntry &entrySetter = *itor;
199 if (0 == strcmp(entrySetter.getEntry()->getName(), "Mod"))
201 GLWDropDownText *control = (GLWDropDownText *) entrySetter.getControl();
202 entrySetter.getEntry()->setValueFromString(control->getCurrentDataText());
204 else
205 switch (entrySetter.getEntry()->getEntryType())
207 case OptionEntry::OptionEntryStringType:
209 GLWTextBox *control = (GLWTextBox *) entrySetter.getControl();
210 entrySetter.getEntry()->setValueFromString(control->getText().c_str());
212 break;
213 case OptionEntry::OptionEntryBoundedIntType:
214 case OptionEntry::OptionEntryEnumType:
215 case OptionEntry::OptionEntryStringEnumType:
217 GLWDropDownText *control = (GLWDropDownText *) entrySetter.getControl();
218 entrySetter.getEntry()->setValueFromString(control->getCurrentDataText());
220 break;
221 case OptionEntry::OptionEntryBoolType:
223 OptionEntryBool *boolEntry = (OptionEntryBool *) entrySetter.getEntry();
224 GLWCheckBox *control = (GLWCheckBox *) entrySetter.getControl();
225 boolEntry->setValue(control->getState());
227 break;