GLWOptionEntry.cpp

Go to the documentation of this file.
00001 ////////////////////////////////////////////////////////////////////////////////
00002 //    Scorched3D (c) 2000-2009
00003 //
00004 //    This file is part of Scorched3D.
00005 //
00006 //    Scorched3D is free software; you can redistribute it and/or modify
00007 //    it under the terms of the GNU General Public License as published by
00008 //    the Free Software Foundation; either version 2 of the License, or
00009 //    (at your option) any later version.
00010 //
00011 //    Scorched3D is distributed in the hope that it will be useful,
00012 //    but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 //    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014 //    GNU General Public License for more details.
00015 //
00016 //    You should have received a copy of the GNU General Public License
00017 //    along with Scorched3D; if not, write to the Free Software
00018 //    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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 }

Generated on Mon Feb 16 15:14:45 2009 for Scorched3D by  doxygen 1.5.3