00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <GLW/GLWOptionEntry.h>
00022 #include <GLW/GLWLabel.h>
00023 #include <GLW/GLWPanel.h>
00024 #include <GLW/GLWCheckBox.h>
00025 #include <GLW/GLWDropDownText.h>
00026 #include <GLW/GLWTextBox.h>
00027 #include <engine/ModDirs.h>
00028 #include <common/Defines.h>
00029 #include <common/ToolTip.h>
00030
00031 GLWOptionEntry::GLWOptionEntry(GLWidget *control, OptionEntry *entry) :
00032 control_(control), entry_(entry)
00033 {
00034 }
00035
00036 GLWOptionEntry::~GLWOptionEntry()
00037 {
00038 }
00039
00040 void GLWOptionEntry::createEntry(
00041 std::list<GLWOptionEntry> &controls,
00042 GLWPanel *parent, OptionEntry &entry)
00043 {
00044 std::string descriptionName;
00045 descriptionName.append(entry.getName()).append("_description");
00046
00047 GLWLabel *staticText = new GLWLabel(0.0f, 0.0f,
00048 LANG_RESOURCE(entry.getName(), entry.getName()));
00049 staticText->setToolTip(new ToolTip(ToolTip::ToolTipHelp,
00050 LANG_RESOURCE(entry.getName(), entry.getName()),
00051 LANG_RESOURCE(descriptionName, entry.getDescription())));
00052 parent->addWidget(staticText, 0, GLWPanel::AlignRight |
00053 GLWPanel::SpaceLeft | GLWPanel::SpaceTop, 10.0f);
00054
00055 GLWidget *control = 0;
00056 if (0 == strcmp(entry.getName(), "Mod"))
00057 {
00058 control = new GLWDropDownText(0.0f, 0.0f, 170.0f);
00059 ModDirs modDirs;
00060 modDirs.loadModDirs();
00061 std::list<ModInfo>::iterator itor;
00062 for (itor = modDirs.getDirs().begin();
00063 itor != modDirs.getDirs().end();
00064 itor++)
00065 {
00066 ModInfo &info = (*itor);
00067 ((GLWDropDownText *) control)->addText(
00068 LANG_RESOURCE(info.getName(), info.getName()), info.getName());
00069 }
00070 }
00071 else
00072 switch (entry.getEntryType())
00073 {
00074 case OptionEntry::OptionEntryStringType:
00075 {
00076 control = new GLWTextBox(0.0f, 0.0f, 170.0f);
00077 }
00078 break;
00079 case OptionEntry::OptionEntryBoundedIntType:
00080 {
00081 control = new GLWDropDownText(0.0f, 0.0f, 170.0f);
00082 OptionEntryBoundedInt &boundedInt = (OptionEntryBoundedInt &) entry;
00083 for (int i=boundedInt.getMinValue();
00084 i<=boundedInt.getMaxValue();
00085 i+=boundedInt.getStepValue())
00086 {
00087 std::string value = S3D::formatStringBuffer("%i", i);
00088 ((GLWDropDownText *) control)->addText(LANG_STRING(value), value);
00089 }
00090 }
00091 break;
00092 case OptionEntry::OptionEntryEnumType:
00093 {
00094 control = new GLWDropDownText(0.0f, 0.0f, 170.0f);
00095
00096 OptionEntryEnum &optionEntryEnum = (OptionEntryEnum &) entry;
00097 OptionEntryEnum::EnumEntry *enums = optionEntryEnum.getEnums();
00098 for (OptionEntryEnum::EnumEntry *current = enums; current->description[0]; current++)
00099 {
00100 ((GLWDropDownText *) control)->addEntry(
00101 GLWSelectorEntry(LANG_RESOURCE(current->description, current->description),
00102 0, false, 0, (void *) current->value, current->description));
00103 }
00104 }
00105 break;
00106 case OptionEntry::OptionEntryStringEnumType:
00107 {
00108 control = new GLWDropDownText(0.0f, 0.0f, 170.0f);
00109
00110 OptionEntryStringEnum &optionEntryStringEnum = (OptionEntryStringEnum &) entry;
00111 OptionEntryStringEnum::EnumEntry *enums = optionEntryStringEnum.getEnums();
00112 for (OptionEntryStringEnum::EnumEntry *current = enums; current->value[0]; current++)
00113 {
00114 ((GLWDropDownText *) control)->addText(LANG_RESOURCE(current->value, current->value),
00115 current->value);
00116 }
00117 }
00118 break;
00119 case OptionEntry::OptionEntryBoolType:
00120 {
00121 control = new GLWCheckBox();
00122 }
00123 break;
00124 default:
00125 S3D::dialogExit("GLWOptionEntry::createEntry",
00126 S3D::formatStringBuffer("Unhandled OptionEntry type %s:%i",
00127 entry.getName(), entry.getEntryType()));
00128 }
00129
00130 control->setToolTip(new ToolTip(ToolTip::ToolTipHelp,
00131 LANG_RESOURCE(entry.getName(), entry.getName()),
00132 LANG_RESOURCE(descriptionName, entry.getDescription())));
00133 parent->addWidget(control, 0,
00134 GLWPanel::SpaceRight | GLWPanel::SpaceLeft | GLWPanel::SpaceTop, 10.0f);
00135
00136 controls.push_back(GLWOptionEntry(control, &entry));
00137 }
00138
00139 void GLWOptionEntry::updateControls(
00140 std::list<GLWOptionEntry> &controls)
00141 {
00142 std::list<GLWOptionEntry>::iterator itor;
00143 for (itor = controls.begin();
00144 itor != controls.end();
00145 itor++)
00146 {
00147 GLWOptionEntry &entrySetter = *itor;
00148
00149 if (0 == strcmp(entrySetter.getEntry()->getName(), "Mod"))
00150 {
00151 GLWDropDownText *control = (GLWDropDownText *) entrySetter.getControl();
00152 control->setCurrentText(LANG_RESOURCE(entrySetter.getEntry()->getValueAsString(),
00153 entrySetter.getEntry()->getValueAsString()));
00154 }
00155 else
00156 switch (entrySetter.getEntry()->getEntryType())
00157 {
00158 case OptionEntry::OptionEntryStringType:
00159 {
00160 GLWTextBox *control = (GLWTextBox *) entrySetter.getControl();
00161 control->setText(LANG_STRING(entrySetter.getEntry()->getValueAsString()));
00162 }
00163 break;
00164 case OptionEntry::OptionEntryBoundedIntType:
00165 {
00166 GLWDropDownText *control = (GLWDropDownText *) entrySetter.getControl();
00167 control->setCurrentText(LANG_STRING(entrySetter.getEntry()->getValueAsString()));
00168 }
00169 break;
00170 case OptionEntry::OptionEntryEnumType:
00171 case OptionEntry::OptionEntryStringEnumType:
00172 {
00173 GLWDropDownText *control = (GLWDropDownText *) entrySetter.getControl();
00174 control->setCurrentText(LANG_RESOURCE(entrySetter.getEntry()->getValueAsString(),
00175 entrySetter.getEntry()->getValueAsString()));
00176 }
00177 break;
00178 case OptionEntry::OptionEntryBoolType:
00179 {
00180 OptionEntryBool *boolEntry = (OptionEntryBool *) entrySetter.getEntry();
00181 GLWCheckBox *control = (GLWCheckBox *) entrySetter.getControl();
00182 control->setState(boolEntry->getValue());
00183 }
00184 break;
00185 }
00186 }
00187 }
00188
00189 void GLWOptionEntry::updateEntries(
00190 std::list<GLWOptionEntry> &controls)
00191 {
00192 std::list<GLWOptionEntry>::iterator itor;
00193 for (itor = controls.begin();
00194 itor != controls.end();
00195 itor++)
00196 {
00197 GLWOptionEntry &entrySetter = *itor;
00198
00199 if (0 == strcmp(entrySetter.getEntry()->getName(), "Mod"))
00200 {
00201 GLWDropDownText *control = (GLWDropDownText *) entrySetter.getControl();
00202 entrySetter.getEntry()->setValueFromString(control->getCurrentDataText());
00203 }
00204 else
00205 switch (entrySetter.getEntry()->getEntryType())
00206 {
00207 case OptionEntry::OptionEntryStringType:
00208 {
00209 GLWTextBox *control = (GLWTextBox *) entrySetter.getControl();
00210 entrySetter.getEntry()->setValueFromString(control->getText().c_str());
00211 }
00212 break;
00213 case OptionEntry::OptionEntryBoundedIntType:
00214 case OptionEntry::OptionEntryEnumType:
00215 case OptionEntry::OptionEntryStringEnumType:
00216 {
00217 GLWDropDownText *control = (GLWDropDownText *) entrySetter.getControl();
00218 entrySetter.getEntry()->setValueFromString(control->getCurrentDataText());
00219 }
00220 break;
00221 case OptionEntry::OptionEntryBoolType:
00222 {
00223 OptionEntryBool *boolEntry = (OptionEntryBool *) entrySetter.getEntry();
00224 GLWCheckBox *control = (GLWCheckBox *) entrySetter.getControl();
00225 boolEntry->setValue(control->getState());
00226 }
00227 break;
00228 }
00229 }
00230 }