Allow [advanced_preference]s to be of 'int' type.

This commit is contained in:
Alexander van Gessel 2009-07-18 04:41:38 +01:00
parent 07a99c295c
commit 9970eafa3b
3 changed files with 61 additions and 8 deletions

View file

@ -21,6 +21,7 @@ Version 1.7.1+svn:
* Changed "Toggle Full Screen" button to say "Full Screen" (bug #13909)
* Added cost of units recruited, recalled, killed, and lost, to the statistics window (patch #1190)
* Fixed bug #13626: Bug about no option to turn on/off save delete confimation. (patch #1192)
* Allow [advanced_preference]s to be of the 'int' type, appearing as a slider.
* Miscellaneous and bugfixes:
* Fixed language switch not affecting unit descriptions (bug #13827)
* Fixed teleporting to impassable terrain (bug #13795)

View file

@ -64,9 +64,22 @@
[/advanced_preference]
# this can be uncommented once type=int or similar is supported
# the hardcoded value also needs to be removed from network.cpp
#[advanced_preference]
# field=ping_timeout
# name=_"Ping Timeout"
# type=int
# default=60
# min=0
# max=180
# step=10
#[/advanced_preference]
#[advanced_preference]
# field=dummy_slider
# name="Dummy Slider"
# type=int
# default=42
# min=0
# max=50
#[/advanced_preference]

View file

@ -95,7 +95,7 @@ private:
// change
gui::slider music_slider_, sound_slider_, UI_sound_slider_, bell_slider_,
scroll_slider_, chat_lines_slider_,
buffer_size_slider_, idle_anim_slider_, autosavemax_slider_;
buffer_size_slider_, idle_anim_slider_, autosavemax_slider_, advanced_slider_;
gui::list_slider<double> turbo_slider_;
gui::button fullscreen_button_, scroll_to_action_button_,turbo_button_, show_ai_moves_button_,
show_grid_button_, save_replays_button_, delete_saves_button_,
@ -120,7 +120,8 @@ private:
gui::label music_label_, sound_label_, UI_sound_label_, bell_label_,
scroll_label_, chat_lines_label_,
turbo_slider_label_, sample_rate_label_, buffer_size_label_,
idle_anim_slider_label_, autosavemax_slider_label_;
idle_anim_slider_label_, autosavemax_slider_label_,
advanced_slider_label_;
gui::textbox sample_rate_input_, friends_input_;
unsigned slider_label_width_;
@ -147,6 +148,7 @@ preferences_dialog::preferences_dialog(display& disp, const config& game_cfg)
scroll_slider_(disp.video()),
chat_lines_slider_(disp.video()), buffer_size_slider_(disp.video()),
idle_anim_slider_(disp.video()), autosavemax_slider_(disp.video()),
advanced_slider_(disp.video()),
turbo_slider_(disp.video()),
@ -200,6 +202,7 @@ preferences_dialog::preferences_dialog(display& disp, const config& game_cfg)
sample_rate_label_(disp.video(), _("Sample Rate (Hz):")), buffer_size_label_(disp.video(), ""),
idle_anim_slider_label_(disp.video(), _("Frequency:")),
autosavemax_slider_label_(disp.video(), "", font::SIZE_SMALL),
advanced_slider_label_(disp.video(), "", font::SIZE_SMALL),
sample_rate_input_(disp.video(), 70),
friends_input_(disp.video(), 170),
@ -408,6 +411,7 @@ handler_vector preferences_dialog::handler_members()
h.push_back(&idle_anim_slider_);
h.push_back(&autosavemax_slider_);
h.push_back(&buffer_size_slider_);
h.push_back(&advanced_slider_);
h.push_back(&fullscreen_button_);
h.push_back(&scroll_to_action_button_);
h.push_back(&turbo_button_);
@ -458,6 +462,7 @@ handler_vector preferences_dialog::handler_members()
h.push_back(&turbo_slider_label_);
h.push_back(&idle_anim_slider_label_);
h.push_back(&autosavemax_slider_label_);
h.push_back(&advanced_slider_label_);
h.push_back(&chat_lines_label_);
h.push_back(&sample_rate_label_);
h.push_back(&buffer_size_label_);
@ -644,6 +649,10 @@ void preferences_dialog::update_location(SDL_Rect const &rect)
ypos += advanced_.height() + font::relative_size(14);
advanced_button_.set_location(rect.x,ypos);
advanced_slider_label_.set_location(rect.x,ypos);
const SDL_Rect advanced_slider_rect = { rect.x, ypos+short_interline,
rect.w - right_border, 0};
advanced_slider_.set_location(advanced_slider_rect);
set_selection(tab_);
}
@ -917,19 +926,32 @@ void preferences_dialog::process_event()
const config* const adv = get_advanced_pref();
if(adv != NULL) {
const config& pref = *adv;
advanced_button_.set_width(0);
advanced_button_.set_label(pref["name"]);
std::string value = preferences::get(pref["field"]);
advanced_button_.hide(pref["type"] != "boolean");
const bool hide_int = pref["type"] != "int";
advanced_slider_.hide(hide_int);
advanced_slider_label_.hide(hide_int);
if(value.empty()) {
value = pref["default"];
}
advanced_button_.set_check(value == "yes");
if (pref["type"] == "boolean") {
advanced_button_.set_width(0);
advanced_button_.set_label(pref["name"]);
advanced_button_.set_check(value == "yes");
} else if (pref["type"] == "int") {
std::stringstream ss;
ss << pref["name"] << ": " << value;
advanced_slider_label_.set_text(ss.str());
advanced_slider_.set_min(lexical_cast<int>(pref["min"]));
advanced_slider_.set_max(lexical_cast<int>(pref["max"]));
advanced_slider_.set_increment(lexical_cast_default<int>(pref["step"], 1));
advanced_slider_.set_value(lexical_cast<int>(value));
}
}
}
const config* const adv = get_advanced_pref();
if(advanced_button_.pressed()) {
const config* const adv = get_advanced_pref();
if(adv != NULL) {
const config& pref = *adv;
preferences::set(pref["field"],
@ -938,6 +960,18 @@ void preferences_dialog::process_event()
}
}
if(advanced_slider_.value_change()) {
if(adv != NULL) {
const config& pref = *adv;
preferences::set(pref["field"],
str_cast(advanced_slider_.value()));
set_advanced_menu();
std::stringstream ss;
ss << pref["name"] << ": " << advanced_slider_.value();
advanced_slider_label_.set_text(ss.str());
}
}
return;
}
}
@ -1106,7 +1140,12 @@ void preferences_dialog::set_selection(int index)
const bool hide_advanced = tab_ != ADVANCED_TAB;
advanced_.hide(hide_advanced);
advanced_button_.hide(hide_advanced);
const std::string adv_type = get_advanced_pref() != NULL ? (*get_advanced_pref())["type"] : "";
const bool hide_advanced_bool = hide_advanced || adv_type != "boolean";
const bool hide_advanced_int = hide_advanced || adv_type != "int";
advanced_button_.hide(hide_advanced_bool);
advanced_slider_label_.hide(hide_advanced_int);
advanced_slider_.hide(hide_advanced_int);
}
}