1 ////////////////////////////////////////////////////////////////////////////////
2 // Scorched3D (c) 2000-2009
4 // This file is part of Scorched3D.
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
);
60 modDirs
.loadModDirs();
61 std::list
<ModInfo
>::iterator itor
;
62 for (itor
= modDirs
.getDirs().begin();
63 itor
!= modDirs
.getDirs().end();
66 ModInfo
&info
= (*itor
);
67 ((GLWDropDownText
*) control
)->addText(
68 LANG_RESOURCE(info
.getName(), info
.getName()), info
.getName());
72 switch (entry
.getEntryType())
74 case OptionEntry::OptionEntryStringType
:
76 control
= new GLWTextBox(0.0f
, 0.0f
, 170.0f
);
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
);
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
));
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
),
119 case OptionEntry::OptionEntryBoolType
:
121 control
= new GLWCheckBox();
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();
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()));
156 switch (entrySetter
.getEntry()->getEntryType())
158 case OptionEntry::OptionEntryStringType
:
160 GLWTextBox
*control
= (GLWTextBox
*) entrySetter
.getControl();
161 control
->setText(LANG_STRING(entrySetter
.getEntry()->getValueAsString()));
164 case OptionEntry::OptionEntryBoundedIntType
:
166 GLWDropDownText
*control
= (GLWDropDownText
*) entrySetter
.getControl();
167 control
->setCurrentText(LANG_STRING(entrySetter
.getEntry()->getValueAsString()));
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()));
178 case OptionEntry::OptionEntryBoolType
:
180 OptionEntryBool
*boolEntry
= (OptionEntryBool
*) entrySetter
.getEntry();
181 GLWCheckBox
*control
= (GLWCheckBox
*) entrySetter
.getControl();
182 control
->setState(boolEntry
->getValue());
189 void GLWOptionEntry::updateEntries(
190 std::list
<GLWOptionEntry
> &controls
)
192 std::list
<GLWOptionEntry
>::iterator itor
;
193 for (itor
= controls
.begin();
194 itor
!= controls
.end();
197 GLWOptionEntry
&entrySetter
= *itor
;
199 if (0 == strcmp(entrySetter
.getEntry()->getName(), "Mod"))
201 GLWDropDownText
*control
= (GLWDropDownText
*) entrySetter
.getControl();
202 entrySetter
.getEntry()->setValueFromString(control
->getCurrentDataText());
205 switch (entrySetter
.getEntry()->getEntryType())
207 case OptionEntry::OptionEntryStringType
:
209 GLWTextBox
*control
= (GLWTextBox
*) entrySetter
.getControl();
210 entrySetter
.getEntry()->setValueFromString(control
->getText().c_str());
213 case OptionEntry::OptionEntryBoundedIntType
:
214 case OptionEntry::OptionEntryEnumType
:
215 case OptionEntry::OptionEntryStringEnumType
:
217 GLWDropDownText
*control
= (GLWDropDownText
*) entrySetter
.getControl();
218 entrySetter
.getEntry()->setValueFromString(control
->getCurrentDataText());
221 case OptionEntry::OptionEntryBoolType
:
223 OptionEntryBool
*boolEntry
= (OptionEntryBool
*) entrySetter
.getEntry();
224 GLWCheckBox
*control
= (GLWCheckBox
*) entrySetter
.getControl();
225 boolEntry
->setValue(control
->getState());