OptionEntrySetter.cpp

Go to the documentation of this file.
00001 ////////////////////////////////////////////////////////////////////////////////
00002 //    Scorched3D (c) 2000-2004
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 <wxdialogs/OptionEntrySetter.h>
00022 #include <wxdialogs/MainDialog.h>
00023 #include <common/Defines.h>
00024 
00025 OptionEntrySetter::OptionEntrySetter(wxControl *control, OptionEntry &entry) :
00026         control_(control), entry_(entry)
00027 {
00028 }
00029 
00030 OptionEntrySetter::~OptionEntrySetter()
00031 {
00032 }
00033 
00034 OptionEntrySetter OptionEntrySetterUtil::createOtherSetter(
00035         wxWindow *parent, wxSizer *sizer, OptionEntry &entry)
00036 {
00037         wxStaticText *staticText = 0;
00038         sizer->Add(staticText = new wxStaticText(parent, -1,
00039                 wxString(entry.getName(), wxConvUTF8)), 
00040                 0, wxALIGN_RIGHT | wxRIGHT, 10);
00041         staticText->SetToolTip(
00042                 wxString(entry.getDescription(), wxConvUTF8));
00043 
00044         wxControl *control = 0;
00045         switch (entry.getEntryType())
00046         {
00047         case OptionEntry::OptionEntryStringType:
00048                 {
00049                         sizer->Add(control = 
00050                                 new wxTextCtrl(parent, -1,
00051                                 wxT(""),
00052                                 wxDefaultPosition, wxDefaultSize,
00053                                 wxTE_PASSWORD), 
00054                                 0, wxALIGN_LEFT);
00055                         control->SetToolTip(
00056                                 wxString(entry.getDescription(), wxConvUTF8));
00057                 }
00058                 break;
00059         case OptionEntry::OptionEntryBoundedIntType:
00060                 {
00061                         sizer->Add(control = 
00062                                 new wxComboBox(parent, -1,
00063                                 wxT(""),
00064                                 wxDefaultPosition, wxSize(160, -1),
00065                                 0, 0, 0), 
00066                                 0, wxALIGN_LEFT);
00067                         control->SetToolTip(
00068                                 wxString(entry.getDescription(), wxConvUTF8));
00069 
00070                         OptionEntryBoundedInt &boundedInt = (OptionEntryBoundedInt &) entry;
00071                         for (int i=boundedInt.getMinValue(); 
00072                                 i<=boundedInt.getMaxValue(); 
00073                                 i+=boundedInt.getStepValue())
00074                         {
00075                                 ((wxComboBox *) control)->Append(
00076                                         convertString(S3D::formatStringBuffer("%i", i)), 
00077                                         (void *) i);
00078                         }
00079                 }
00080                 break;
00081         case OptionEntry::OptionEntryEnumType:
00082                 {
00083                         sizer->Add(control = 
00084                                 new wxComboBox(parent, -1,
00085                                 wxT(""),
00086                                 wxDefaultPosition, wxSize(160, -1),
00087                                 0, 0, wxCB_READONLY), 
00088                                 0, wxALIGN_LEFT);
00089                         control->SetToolTip(
00090                                 wxString(entry.getDescription(), wxConvUTF8));
00091 
00092                         OptionEntryEnum &optionEntryEnum = (OptionEntryEnum &) entry;
00093                         OptionEntryEnum::EnumEntry *enums = optionEntryEnum.getEnums();
00094                         for (OptionEntryEnum::EnumEntry *current = enums; current->description[0]; current++)
00095                         {
00096                                 ((wxComboBox *) control)->Append(
00097                                         wxString(current->description, wxConvUTF8), 
00098                                         (void *) current->value);
00099                         }
00100                 }
00101                 break;
00102         case OptionEntry::OptionEntryStringEnumType:
00103                 {
00104                         sizer->Add(control = 
00105                                 new wxComboBox(parent, -1,
00106                                 wxT(""),
00107                                 wxDefaultPosition, wxSize(160, -1),
00108                                 0, 0, wxCB_READONLY), 
00109                                 0, wxALIGN_LEFT);
00110                         control->SetToolTip(
00111                                 wxString(entry.getDescription(), wxConvUTF8));
00112 
00113                         OptionEntryStringEnum &optionEntryStringEnum = (OptionEntryStringEnum &) entry;
00114                         OptionEntryStringEnum::EnumEntry *enums = optionEntryStringEnum.getEnums();
00115                         for (OptionEntryStringEnum::EnumEntry *current = enums; current->value[0]; current++)
00116                         {
00117                                 ((wxComboBox *) control)->Append(
00118                                         wxString(current->value, wxConvUTF8));
00119                         }
00120                 }
00121                 break;
00122         case OptionEntry::OptionEntryBoolType:
00123                 {
00124                         sizer->Add(control = 
00125                                 new wxCheckBox(parent, -1,
00126                                         wxT(""),
00127                                         wxDefaultPosition, wxDefaultSize),
00128                                         0, wxALIGN_LEFT);
00129                         control->SetToolTip(
00130                                 wxString(entry.getDescription(), wxConvUTF8));
00131                 }
00132                 break;
00133         default:
00134                 S3D::dialogExit("createOtherSetter",
00135                         S3D::formatStringBuffer("Unhandled OptionEntry type %s:%i",
00136                         entry.getName(), entry.getEntryType()));
00137         }
00138 
00139         return OptionEntrySetter(control, entry);
00140 }
00141 
00142 void OptionEntrySetterUtil::updateControls(
00143         std::list<OptionEntrySetter> &controls)
00144 {
00145         std::list<OptionEntrySetter>::iterator itor;
00146         for (itor = controls.begin();
00147                 itor != controls.end();
00148                 itor++)
00149         {
00150                 OptionEntrySetter &entrySetter = *itor;
00151                 switch (entrySetter.getEntry().getEntryType())
00152                 {
00153                 case OptionEntry::OptionEntryStringType:
00154                         {
00155                                 wxTextCtrl *control = (wxTextCtrl *) entrySetter.getControl();
00156                                 control->SetValue(wxString(entrySetter.getEntry().getValueAsString(), wxConvUTF8));
00157                         }
00158                         break;
00159                 case OptionEntry::OptionEntryBoundedIntType:
00160                 case OptionEntry::OptionEntryEnumType:
00161                 case OptionEntry::OptionEntryStringEnumType:
00162                         {
00163                                 wxComboBox *control = (wxComboBox *) entrySetter.getControl();
00164                                 control->SetValue(wxString(entrySetter.getEntry().getValueAsString(), wxConvUTF8));
00165                         }
00166                         break;
00167                 case OptionEntry::OptionEntryBoolType:
00168                         {
00169                                 OptionEntryBool &boolEntry = (OptionEntryBool &) entrySetter.getEntry();
00170                                 wxCheckBox *control = (wxCheckBox *) entrySetter.getControl();
00171                                 control->SetValue(boolEntry.getValue());
00172                         }
00173                         break;
00174                 }
00175         }
00176 }
00177 
00178 void OptionEntrySetterUtil::updateEntries(
00179         std::list<OptionEntrySetter> &controls)
00180 {
00181         std::list<OptionEntrySetter>::iterator itor;
00182         for (itor = controls.begin();
00183                 itor != controls.end();
00184                 itor++)
00185         {
00186                 OptionEntrySetter &entrySetter = *itor;
00187                 switch (entrySetter.getEntry().getEntryType())
00188                 {
00189                 case OptionEntry::OptionEntryStringType:
00190                         {
00191                                 wxTextCtrl *control = (wxTextCtrl *) entrySetter.getControl();
00192                                 entrySetter.getEntry().setValueFromString(
00193                                         std::string(control->GetValue().mb_str(wxConvUTF8)));
00194                         }
00195                         break;
00196                 case OptionEntry::OptionEntryBoundedIntType:
00197                 case OptionEntry::OptionEntryEnumType:
00198                 case OptionEntry::OptionEntryStringEnumType:
00199                         {
00200                                 wxComboBox *control = (wxComboBox *) entrySetter.getControl();
00201                                 entrySetter.getEntry().setValueFromString(
00202                                         std::string(control->GetValue().mb_str(wxConvUTF8)));
00203                         }
00204                         break;
00205                 case OptionEntry::OptionEntryBoolType:
00206                         {
00207                                 OptionEntryBool &boolEntry = (OptionEntryBool &) entrySetter.getEntry();
00208                                 wxCheckBox *control = (wxCheckBox *) entrySetter.getControl();
00209                                 boolEntry.setValue(control->GetValue());
00210                         }
00211                         break;
00212                 }
00213         }
00214 }

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