00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
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 }