summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2012-12-26 17:42:29 +0000
committerfrosch <frosch@openttd.org>2012-12-26 17:42:29 +0000
commit9bce12a0ce1e084c5046500cc45c7883102b2c2f (patch)
tree524ad8da6c0e177c939f32f6775f5a2dde1ab692
parent24e62f39e072a4c8539b89a67504d42b90b65f87 (diff)
downloadopenttd-9bce12a0ce1e084c5046500cc45c7883102b2c2f.tar.xz
(svn r24859) -Codechange: Make the dropdown handling of the adv. settings GUI more generic.
-rw-r--r--src/settings_gui.cpp82
1 files changed, 43 insertions, 39 deletions
diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp
index 9726b2fff..4164e50a9 100644
--- a/src/settings_gui.cpp
+++ b/src/settings_gui.cpp
@@ -2099,57 +2099,61 @@ struct GameSettingsWindow : Window {
virtual void OnDropdownSelect(int widget, int index)
{
- if (widget == WID_GS_RESTRICT_DROPDOWN) {
- this->cur_restriction_mode = (RestrictionMode)index;
- if (this->cur_restriction_mode == RM_CHANGED_AGAINST_DEFAULT ||
- this->cur_restriction_mode == RM_CHANGED_AGAINST_DEFAULT_WO_LOCAL ||
- this->cur_restriction_mode == RM_CHANGED_AGAINST_NEW) {
-
- if (!this->manually_changed_folding) {
- /* Expand all when selecting 'changes'. Update the filter state first, in case it becomes less restrictive in some cases. */
- _settings_main_page.UpdateFilterState(string_filter, false, this->cur_restriction_mode);
- _settings_main_page.UnFoldAll();
+ switch (widget) {
+ case WID_GS_RESTRICT_DROPDOWN:
+ this->cur_restriction_mode = (RestrictionMode)index;
+ if (this->cur_restriction_mode == RM_CHANGED_AGAINST_DEFAULT ||
+ this->cur_restriction_mode == RM_CHANGED_AGAINST_DEFAULT_WO_LOCAL ||
+ this->cur_restriction_mode == RM_CHANGED_AGAINST_NEW) {
+
+ if (!this->manually_changed_folding) {
+ /* Expand all when selecting 'changes'. Update the filter state first, in case it becomes less restrictive in some cases. */
+ _settings_main_page.UpdateFilterState(string_filter, false, this->cur_restriction_mode);
+ _settings_main_page.UnFoldAll();
+ }
+ } else {
+ /* Non-'changes' filter. Save as default. */
+ _settings_client.gui.settings_restriction_mode = this->cur_restriction_mode;
}
- } else {
- /* Non-'changes' filter. Save as default. */
- _settings_client.gui.settings_restriction_mode = this->cur_restriction_mode;
- }
- this->InvalidateData();
- return;
- }
+ this->InvalidateData();
+ break;
- /* Deal with drop down boxes on the panel. */
- assert(this->valuedropdown_entry != NULL);
- const SettingDesc *sd = this->valuedropdown_entry->d.entry.setting;
- assert(sd->desc.flags & SGF_MULTISTRING);
+ default:
+ if (widget < 0) {
+ /* Deal with drop down boxes on the panel. */
+ assert(this->valuedropdown_entry != NULL);
+ const SettingDesc *sd = this->valuedropdown_entry->d.entry.setting;
+ assert(sd->desc.flags & SGF_MULTISTRING);
+
+ if ((sd->desc.flags & SGF_PER_COMPANY) != 0) {
+ SetCompanySetting(this->valuedropdown_entry->d.entry.index, index);
+ } else {
+ SetSettingValue(this->valuedropdown_entry->d.entry.index, index);
+ }
- if ((sd->desc.flags & SGF_PER_COMPANY) != 0) {
- SetCompanySetting(this->valuedropdown_entry->d.entry.index, index);
- } else {
- SetSettingValue(this->valuedropdown_entry->d.entry.index, index);
+ this->SetDirty();
+ }
+ break;
}
-
- this->SetDirty();
}
virtual void OnDropdownClose(Point pt, int widget, int index, bool instant_close)
{
- if (widget == WID_GS_RESTRICT_DROPDOWN) {
+ if (widget >= 0) {
/* Normally the default implementation of OnDropdownClose() takes care of
- * a few things. We want that behaviour here too, but only for this one
- * "normal" dropdown box. The special dropdown boxes added for every
+ * a few things. We want that behaviour here too, but only for
+ * "normal" dropdown boxes. The special dropdown boxes added for every
* setting that needs one can't have this call. */
Window::OnDropdownClose(pt, widget, index, instant_close);
- return;
+ } else {
+ /* We cannot raise the dropdown button just yet. OnClick needs some hint, whether
+ * the same dropdown button was clicked again, and then not open the dropdown again.
+ * So, we only remember that it was closed, and process it on the next OnPaint, which is
+ * after OnClick. */
+ assert(this->valuedropdown_entry != NULL);
+ this->closing_dropdown = true;
+ this->SetDirty();
}
-
- /* We cannot raise the dropdown button just yet. OnClick needs some hint, whether
- * the same dropdown button was clicked again, and then not open the dropdown again.
- * So, we only remember that it was closed, and process it on the next OnPaint, which is
- * after OnClick. */
- assert(this->valuedropdown_entry != NULL);
- this->closing_dropdown = true;
- this->SetDirty();
}
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)