Converted Generator Settings dialog to GUI2
This commit is contained in:
parent
42423a4a57
commit
56e8222bb0
8 changed files with 387 additions and 236 deletions
207
data/gui/window/generator_settings.cfg
Normal file
207
data/gui/window/generator_settings.cfg
Normal file
|
@ -0,0 +1,207 @@
|
|||
#textdomain wesnoth-lib
|
||||
###
|
||||
### Definition of the window to set random map generator settings
|
||||
###
|
||||
|
||||
#define _GUI_SETTING_SLIDER _LABEL _ID _MIN_VALUE _MAX_VALUE
|
||||
[row]
|
||||
|
||||
[column]
|
||||
grow_factor = 0
|
||||
horizontal_grow = "true"
|
||||
border = "all"
|
||||
border_size = 5
|
||||
|
||||
[label]
|
||||
definition = "default"
|
||||
label = {_LABEL}
|
||||
text_alignment = "right"
|
||||
[/label]
|
||||
[/column]
|
||||
|
||||
[column]
|
||||
grow_factor = 1
|
||||
horizontal_grow = "true"
|
||||
border = "all"
|
||||
border_size = 10
|
||||
|
||||
[slider]
|
||||
id = {_ID}
|
||||
definition = "minimal"
|
||||
|
||||
minimum_value = {_MIN_VALUE}
|
||||
maximum_value = {_MAX_VALUE}
|
||||
|
||||
step_size = 1
|
||||
[/slider]
|
||||
|
||||
[/column]
|
||||
|
||||
[column]
|
||||
grow_factor = 0
|
||||
horizontal_grow = "true"
|
||||
border = "all"
|
||||
border_size = 5
|
||||
|
||||
{GUI_FORCE_WIDGET_MINIMUM_SIZE 100 0 (
|
||||
[label]
|
||||
id = {_ID} + "_label"
|
||||
definition = "default_small"
|
||||
[/label]
|
||||
)}
|
||||
[/column]
|
||||
|
||||
[/row]
|
||||
#enddef
|
||||
|
||||
[window]
|
||||
id = "generator_settings"
|
||||
description = "Random map generator settings."
|
||||
|
||||
[resolution]
|
||||
definition = "default"
|
||||
automatic_placement = "true"
|
||||
vertical_placement = "center"
|
||||
horizontal_placement = "center"
|
||||
|
||||
maximum_height = 600
|
||||
|
||||
[tooltip]
|
||||
id = "tooltip"
|
||||
[/tooltip]
|
||||
|
||||
[helptip]
|
||||
id = "tooltip"
|
||||
[/helptip]
|
||||
|
||||
[grid]
|
||||
[row]
|
||||
grow_factor = 0
|
||||
|
||||
[column]
|
||||
grow_factor = 1
|
||||
border = "all"
|
||||
border_size = 5
|
||||
horizontal_alignment = "left"
|
||||
|
||||
[label]
|
||||
definition = "title"
|
||||
label = _ "Map Generator Settings"
|
||||
[/label]
|
||||
|
||||
[/column]
|
||||
|
||||
[/row]
|
||||
|
||||
[row]
|
||||
grow_factor = 1
|
||||
|
||||
[column]
|
||||
horizontal_grow = "true"
|
||||
vertical_grow = "true"
|
||||
|
||||
[grid]
|
||||
|
||||
{_GUI_SETTING_SLIDER ( _ "Players:") "players" 2 9}
|
||||
|
||||
{_GUI_SETTING_SLIDER ( _ "Width:") "width" 20 100}
|
||||
|
||||
{_GUI_SETTING_SLIDER ( _ "Height:") "height" 20 100}
|
||||
|
||||
{_GUI_SETTING_SLIDER ( _ "Number of Hills:") "hills_num" 10 3000}
|
||||
|
||||
{_GUI_SETTING_SLIDER ( _ "Max Hill Size:") "hills_size" 1 50}
|
||||
|
||||
{_GUI_SETTING_SLIDER ( _ "Villages:") "villages" 0 50}
|
||||
|
||||
{_GUI_SETTING_SLIDER ( _ "Castle Size:") "castle_size" 2 14}
|
||||
|
||||
{_GUI_SETTING_SLIDER ( _ "Landform:") "landform" 0 10}
|
||||
|
||||
[row]
|
||||
grow_factor = 1
|
||||
|
||||
{GUI_FILLER}
|
||||
|
||||
[column]
|
||||
horizontal_grow = "true"
|
||||
vertical_grow = "true"
|
||||
border = "all"
|
||||
border_size = 10
|
||||
|
||||
[toggle_button]
|
||||
id = "connect_castles"
|
||||
definition = "default"
|
||||
label = _ "Roads Between Castles"
|
||||
[/toggle_button]
|
||||
[/column]
|
||||
|
||||
{GUI_FILLER}
|
||||
|
||||
[/row]
|
||||
|
||||
[row]
|
||||
grow_factor = 1
|
||||
|
||||
{GUI_FILLER}
|
||||
|
||||
[column]
|
||||
horizontal_grow = "true"
|
||||
vertical_grow = "true"
|
||||
border = "all"
|
||||
border_size = 10
|
||||
|
||||
[toggle_button]
|
||||
id = "show_labels"
|
||||
definition = "default"
|
||||
label = _ "Show Labels"
|
||||
[/toggle_button]
|
||||
[/column]
|
||||
|
||||
{GUI_FILLER}
|
||||
|
||||
[/row]
|
||||
|
||||
[/grid]
|
||||
|
||||
[/column]
|
||||
|
||||
[/row]
|
||||
|
||||
[row]
|
||||
grow_factor = 0
|
||||
|
||||
[column]
|
||||
grow_factor = 0
|
||||
horizontal_alignment = "right"
|
||||
|
||||
[grid]
|
||||
[row]
|
||||
grow_factor=0
|
||||
|
||||
[column]
|
||||
border = "all"
|
||||
border_size = 5
|
||||
horizontal_alignment = "right"
|
||||
|
||||
[button]
|
||||
id = "ok"
|
||||
definition = "default"
|
||||
label = _ "Close"
|
||||
[/button]
|
||||
[/column]
|
||||
[/row]
|
||||
|
||||
[/grid]
|
||||
|
||||
[/column]
|
||||
|
||||
[/row]
|
||||
|
||||
[/grid]
|
||||
|
||||
[/resolution]
|
||||
|
||||
[/window]
|
||||
|
||||
#undef _GUI_SETTING_SLIDER
|
|
@ -541,6 +541,8 @@
|
|||
<Unit filename="../../src/gui/dialogs/editor/edit_side.hpp" />
|
||||
<Unit filename="../../src/gui/dialogs/editor/generate_map.cpp" />
|
||||
<Unit filename="../../src/gui/dialogs/editor/generate_map.hpp" />
|
||||
<Unit filename="../../src/gui/dialogs/editor/generator_settings.cpp" />
|
||||
<Unit filename="../../src/gui/dialogs/editor/generator_settings.hpp" />
|
||||
<Unit filename="../../src/gui/dialogs/editor/new_map.cpp" />
|
||||
<Unit filename="../../src/gui/dialogs/editor/new_map.hpp" />
|
||||
<Unit filename="../../src/gui/dialogs/editor/resize_map.cpp" />
|
||||
|
|
|
@ -800,6 +800,7 @@ set(wesnoth-main_SRC
|
|||
gui/dialogs/editor/edit_side.cpp
|
||||
gui/dialogs/editor/edit_scenario.cpp
|
||||
gui/dialogs/editor/generate_map.cpp
|
||||
gui/dialogs/editor/generator_settings.cpp
|
||||
gui/dialogs/editor/new_map.cpp
|
||||
gui/dialogs/editor/resize_map.cpp
|
||||
gui/dialogs/editor/set_starting_position.cpp
|
||||
|
|
|
@ -377,6 +377,7 @@ wesnoth_sources = Split("""
|
|||
gui/dialogs/editor/edit_scenario.cpp
|
||||
gui/dialogs/editor/edit_side.cpp
|
||||
gui/dialogs/editor/generate_map.cpp
|
||||
gui/dialogs/editor/generator_settings.cpp
|
||||
gui/dialogs/editor/new_map.cpp
|
||||
gui/dialogs/editor/resize_map.cpp
|
||||
gui/dialogs/editor/set_starting_position.cpp
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
|
||||
#include "default_map_generator.hpp"
|
||||
|
||||
#include "gui/dialogs/editor/generator_settings.hpp"
|
||||
#include "default_map_generator_job.hpp"
|
||||
#include "gettext.hpp"
|
||||
#include "log.hpp"
|
||||
|
@ -63,242 +64,7 @@ bool default_map_generator::allow_user_config() const { return true; }
|
|||
|
||||
void default_map_generator::user_config(CVideo& v)
|
||||
{
|
||||
const events::event_context dialog_events_context;
|
||||
|
||||
CVideo& screen = v;
|
||||
|
||||
const int width = 600;
|
||||
const int height = 400;
|
||||
const int xpos = screen.getx()/2 - width/2;
|
||||
int ypos = screen.gety()/2 - height/2;
|
||||
|
||||
gui::button close_button(screen,_("Close"));
|
||||
std::vector<gui::button*> buttons(1,&close_button);
|
||||
|
||||
gui::dialog_frame f(screen,_("Map Generator"),gui::dialog_frame::default_style,true,&buttons);
|
||||
f.layout(xpos,ypos,width,height);
|
||||
f.draw();
|
||||
|
||||
SDL_Rect dialog_rect = sdl::create_rect(xpos, ypos, width, height);
|
||||
surface_restorer dialog_restorer(&screen,dialog_rect);
|
||||
|
||||
const std::string& players_label = _("Players:");
|
||||
const std::string& width_label = _("Width:");
|
||||
const std::string& height_label = _("Height:");
|
||||
const std::string& iterations_label = _("Number of hills:");
|
||||
const std::string& hillsize_label = _("Max hill size:");
|
||||
const std::string& villages_label = _("Villages:");
|
||||
const std::string& castlesize_label = _("Castle size:");
|
||||
const std::string& landform_label = _("Landform:");
|
||||
|
||||
SDL_Rect players_rect = font::draw_text(nullptr,screen_area(),font::SIZE_NORMAL,font::NORMAL_COLOR,players_label,0,0);
|
||||
SDL_Rect width_rect = font::draw_text(nullptr,screen_area(),font::SIZE_NORMAL,font::NORMAL_COLOR,width_label,0,0);
|
||||
SDL_Rect height_rect = font::draw_text(nullptr,screen_area(),font::SIZE_NORMAL,font::NORMAL_COLOR,height_label,0,0);
|
||||
SDL_Rect iteration_rect = font::draw_text(nullptr,screen_area(),font::SIZE_NORMAL,font::NORMAL_COLOR,iterations_label,0,0);
|
||||
SDL_Rect hillsize_rect = font::draw_text(nullptr,screen_area(),font::SIZE_NORMAL,font::NORMAL_COLOR,hillsize_label,0,0);
|
||||
SDL_Rect villages_rect = font::draw_text(nullptr,screen_area(),font::SIZE_NORMAL,font::NORMAL_COLOR,villages_label,0,0);
|
||||
SDL_Rect castlesize_rect = font::draw_text(nullptr,screen_area(),font::SIZE_NORMAL,font::NORMAL_COLOR,castlesize_label,0,0);
|
||||
SDL_Rect landform_rect = font::draw_text(nullptr,screen_area(),font::SIZE_NORMAL,font::NORMAL_COLOR,landform_label,0,0);
|
||||
|
||||
const int horz_margin = 15;
|
||||
const int text_right = xpos + horz_margin +
|
||||
std::max<int>(std::max<int>(std::max<int>(std::max<int>(std::max<int>(std::max<int>(
|
||||
players_rect.w,width_rect.w),height_rect.w),iteration_rect.w),hillsize_rect.w),villages_rect.w),castlesize_rect.w);
|
||||
|
||||
players_rect.x = text_right - players_rect.w;
|
||||
width_rect.x = text_right - width_rect.w;
|
||||
height_rect.x = text_right - height_rect.w;
|
||||
iteration_rect.x = text_right - iteration_rect.w;
|
||||
hillsize_rect.x = text_right - hillsize_rect.w;
|
||||
villages_rect.x = text_right - villages_rect.w;
|
||||
castlesize_rect.x = text_right - castlesize_rect.w;
|
||||
landform_rect.x = text_right - landform_rect.w;
|
||||
|
||||
const int vertical_margin = 20;
|
||||
players_rect.y = ypos + vertical_margin*2;
|
||||
width_rect.y = players_rect.y + players_rect.h + vertical_margin;
|
||||
height_rect.y = width_rect.y + width_rect.h + vertical_margin;
|
||||
iteration_rect.y = height_rect.y + height_rect.h + vertical_margin;
|
||||
hillsize_rect.y = iteration_rect.y + iteration_rect.h + vertical_margin;
|
||||
villages_rect.y = hillsize_rect.y + hillsize_rect.h + vertical_margin;
|
||||
castlesize_rect.y = villages_rect.y + iteration_rect.h + vertical_margin;
|
||||
landform_rect.y = castlesize_rect.y + villages_rect.h + vertical_margin;
|
||||
|
||||
const int right_space = 150;
|
||||
|
||||
const int slider_left = text_right + 10;
|
||||
const int slider_right = xpos + width - horz_margin - right_space;
|
||||
SDL_Rect slider_rect = sdl::create_rect(slider_left
|
||||
, players_rect.y
|
||||
, slider_right - slider_left
|
||||
, players_rect.h);
|
||||
|
||||
gui::slider players_slider(screen);
|
||||
players_slider.set_location(slider_rect);
|
||||
players_slider.set_min(2);
|
||||
players_slider.set_max(gamemap::MAX_PLAYERS);
|
||||
players_slider.set_value(data_.nplayers);
|
||||
|
||||
const int min_width = 20;
|
||||
const int max_width = 100;
|
||||
const int max_height = 100;
|
||||
const int extra_size_per_player = 2;
|
||||
|
||||
slider_rect.y = width_rect.y;
|
||||
gui::slider width_slider(screen);
|
||||
width_slider.set_location(slider_rect);
|
||||
width_slider.set_min(min_width+(players_slider.value()-2)*extra_size_per_player);
|
||||
width_slider.set_max(max_width);
|
||||
width_slider.set_value(data_.width);
|
||||
|
||||
slider_rect.y = height_rect.y;
|
||||
gui::slider height_slider(screen);
|
||||
height_slider.set_location(slider_rect);
|
||||
height_slider.set_min(min_width+(players_slider.value()-2)*extra_size_per_player);
|
||||
height_slider.set_max(max_height);
|
||||
height_slider.set_value(data_.height);
|
||||
|
||||
const int min_iterations = 10;
|
||||
const int max_iterations = 3000;
|
||||
|
||||
slider_rect.y = iteration_rect.y;
|
||||
gui::slider iterations_slider(screen);
|
||||
iterations_slider.set_location(slider_rect);
|
||||
iterations_slider.set_min(min_iterations);
|
||||
iterations_slider.set_max(max_iterations);
|
||||
iterations_slider.set_value(data_.iterations);
|
||||
|
||||
const int min_hillsize = 1;
|
||||
const int max_hillsize = 50;
|
||||
|
||||
slider_rect.y = hillsize_rect.y;
|
||||
gui::slider hillsize_slider(screen);
|
||||
hillsize_slider.set_location(slider_rect);
|
||||
hillsize_slider.set_min(min_hillsize);
|
||||
hillsize_slider.set_max(max_hillsize);
|
||||
hillsize_slider.set_value(data_.hill_size);
|
||||
|
||||
const int min_villages = 0;
|
||||
const int max_villages = 50;
|
||||
|
||||
slider_rect.y = villages_rect.y;
|
||||
gui::slider villages_slider(screen);
|
||||
villages_slider.set_location(slider_rect);
|
||||
villages_slider.set_min(min_villages);
|
||||
villages_slider.set_max(max_villages);
|
||||
villages_slider.set_value(data_.nvillages);
|
||||
|
||||
const int min_castlesize = 2;
|
||||
const int max_castlesize = 14;
|
||||
|
||||
slider_rect.y = castlesize_rect.y;
|
||||
gui::slider castlesize_slider(screen);
|
||||
castlesize_slider.set_location(slider_rect);
|
||||
castlesize_slider.set_min(min_castlesize);
|
||||
castlesize_slider.set_max(max_castlesize);
|
||||
castlesize_slider.set_value(data_.castle_size);
|
||||
|
||||
|
||||
const int min_landform = 0;
|
||||
const int max_landform = int(max_island);
|
||||
slider_rect.y = landform_rect.y;
|
||||
gui::slider landform_slider(screen);
|
||||
landform_slider.set_location(slider_rect);
|
||||
landform_slider.set_min(min_landform);
|
||||
landform_slider.set_max(max_landform);
|
||||
landform_slider.set_value(data_.island_size);
|
||||
|
||||
SDL_Rect link_rect = slider_rect;
|
||||
link_rect.y = link_rect.y + link_rect.h + vertical_margin;
|
||||
|
||||
gui::button link_castles(screen,_("Roads between castles"),gui::button::TYPE_CHECK);
|
||||
link_castles.set_check(data_.link_castles);
|
||||
link_castles.set_location(link_rect);
|
||||
|
||||
SDL_Rect labels_rect = link_rect;
|
||||
labels_rect.y = labels_rect.y + labels_rect.h + vertical_margin;
|
||||
|
||||
gui::button show_labels(screen,_("Show labels"),gui::button::TYPE_CHECK);
|
||||
show_labels.set_check(data_.show_labels);
|
||||
show_labels.set_location(labels_rect);
|
||||
|
||||
while(true) {
|
||||
data_.nplayers = players_slider.value();
|
||||
data_.width = width_slider.value();
|
||||
data_.height = height_slider.value();
|
||||
data_.iterations = iterations_slider.value();
|
||||
data_.hill_size = hillsize_slider.value();
|
||||
data_.nvillages = villages_slider.value();
|
||||
data_.castle_size = castlesize_slider.value();
|
||||
data_.island_size = landform_slider.value();
|
||||
|
||||
dialog_restorer.restore();
|
||||
close_button.set_dirty(true);
|
||||
if (close_button.pressed())
|
||||
break;
|
||||
|
||||
players_slider.set_dirty();
|
||||
width_slider.set_dirty();
|
||||
height_slider.set_dirty();
|
||||
iterations_slider.set_dirty();
|
||||
hillsize_slider.set_dirty();
|
||||
villages_slider.set_dirty();
|
||||
castlesize_slider.set_dirty();
|
||||
landform_slider.set_dirty();
|
||||
link_castles.set_dirty();
|
||||
show_labels.set_dirty();
|
||||
|
||||
width_slider.set_min(min_width+(players_slider.value()-2)*extra_size_per_player);
|
||||
height_slider.set_min(min_width+(players_slider.value()-2)*extra_size_per_player);
|
||||
|
||||
f.draw();
|
||||
events::raise_process_event();
|
||||
events::raise_draw_event();
|
||||
|
||||
font::draw_text(&screen,screen_area(),font::SIZE_NORMAL,font::NORMAL_COLOR,players_label,players_rect.x,players_rect.y);
|
||||
font::draw_text(&screen,screen_area(),font::SIZE_NORMAL,font::NORMAL_COLOR,width_label,width_rect.x,width_rect.y);
|
||||
font::draw_text(&screen,screen_area(),font::SIZE_NORMAL,font::NORMAL_COLOR,height_label,height_rect.x,height_rect.y);
|
||||
font::draw_text(&screen,screen_area(),font::SIZE_NORMAL,font::NORMAL_COLOR,iterations_label,iteration_rect.x,iteration_rect.y);
|
||||
font::draw_text(&screen,screen_area(),font::SIZE_NORMAL,font::NORMAL_COLOR,hillsize_label,hillsize_rect.x,hillsize_rect.y);
|
||||
font::draw_text(&screen,screen_area(),font::SIZE_NORMAL,font::NORMAL_COLOR,villages_label,villages_rect.x,villages_rect.y);
|
||||
font::draw_text(&screen,screen_area(),font::SIZE_NORMAL,font::NORMAL_COLOR,castlesize_label,castlesize_rect.x,castlesize_rect.y);
|
||||
font::draw_text(&screen,screen_area(),font::SIZE_NORMAL,font::NORMAL_COLOR,landform_label,landform_rect.x,landform_rect.y);
|
||||
|
||||
font::draw_text(&screen, screen_area(), font::SIZE_NORMAL,
|
||||
font::NORMAL_COLOR, std::to_string(data_.nplayers),
|
||||
slider_right + horz_margin, players_rect.y);
|
||||
|
||||
font::draw_text(&screen, screen_area(), font::SIZE_NORMAL,
|
||||
font::NORMAL_COLOR, std::to_string(data_.width),
|
||||
slider_right + horz_margin, width_rect.y);
|
||||
|
||||
font::draw_text(&screen, screen_area(), font::SIZE_NORMAL,
|
||||
font::NORMAL_COLOR, std::to_string(data_.height),
|
||||
slider_right+horz_margin,height_rect.y);
|
||||
|
||||
std::stringstream villages_str;
|
||||
villages_str << data_.nvillages << _("/1000 tiles");
|
||||
font::draw_text(&screen,screen_area(),font::SIZE_NORMAL,font::NORMAL_COLOR,villages_str.str(),
|
||||
slider_right+horz_margin,villages_rect.y);
|
||||
|
||||
font::draw_text(&screen, screen_area(), font::SIZE_NORMAL,
|
||||
font::NORMAL_COLOR, std::to_string(data_.castle_size),
|
||||
slider_right + horz_margin, castlesize_rect.y);
|
||||
|
||||
std::stringstream landform_str;
|
||||
landform_str << translation::gettext(data_.island_size == 0 ? N_("Inland") : (data_.island_size < max_coastal ? N_("Coastal") : N_("Island")));
|
||||
font::draw_text(&screen,screen_area(),font::SIZE_NORMAL,font::NORMAL_COLOR,landform_str.str(),
|
||||
slider_right+horz_margin,landform_rect.y);
|
||||
|
||||
update_rect(xpos,ypos,width,height);
|
||||
|
||||
v.flip();
|
||||
CVideo::delay(100);
|
||||
events::pump();
|
||||
}
|
||||
|
||||
data_.link_castles = link_castles.checked();
|
||||
data_.show_labels = show_labels.checked();
|
||||
gui2::tgenerator_settings::execute(data_, v);
|
||||
}
|
||||
|
||||
std::string default_map_generator::name() const { return "default"; }
|
||||
|
|
111
src/gui/dialogs/editor/generator_settings.cpp
Normal file
111
src/gui/dialogs/editor/generator_settings.cpp
Normal file
|
@ -0,0 +1,111 @@
|
|||
/*
|
||||
Copyright (C) 2010 - 2016 by the Battle for Wesnoth Project http://www.wesnoth.org/
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY.
|
||||
|
||||
See the COPYING file for more details.
|
||||
*/
|
||||
|
||||
#define GETTEXT_DOMAIN "wesnoth-lib"
|
||||
|
||||
#include "gui/dialogs/editor/generator_settings.hpp"
|
||||
|
||||
#include "gui/auxiliary/field.hpp"
|
||||
#include "gui/widgets/label.hpp"
|
||||
#include "gui/widgets/settings.hpp"
|
||||
#include "gui/widgets/slider.hpp"
|
||||
#include "gettext.hpp"
|
||||
|
||||
#include "utils/functional.hpp"
|
||||
|
||||
namespace gui2
|
||||
{
|
||||
|
||||
static int max_coastal = 5;
|
||||
static int extra_size_per_player = 2;
|
||||
static int min_size = 20;
|
||||
|
||||
REGISTER_DIALOG(generator_settings)
|
||||
|
||||
tgenerator_settings::tgenerator_settings(generator_data& data)
|
||||
: players_(register_integer("players", true, data.nplayers))
|
||||
, width_(register_integer("width", true, data.width))
|
||||
, height_(register_integer("height", true, data.height))
|
||||
{
|
||||
register_integer("hills_num", true, data.iterations);
|
||||
register_integer("hills_size", true, data.hill_size);
|
||||
register_integer("villages", true, data.nvillages);
|
||||
register_integer("castle_size", true, data.castle_size);
|
||||
register_integer("landform", true, data.island_size);
|
||||
|
||||
register_bool("connect_castles", true, data.link_castles);
|
||||
register_bool("show_labels", true, data.show_labels);
|
||||
}
|
||||
|
||||
void tgenerator_settings::pre_show(twindow& window)
|
||||
{
|
||||
// We adjust the minimum values of the width and height sliders when the number of players changes.
|
||||
// This is done because the map generator needs more space to generate more castles for more players.
|
||||
connect_signal_notify_modified(*players_->widget(), std::bind(&adjust_minimum_size_by_players, this, std::ref(window)));
|
||||
|
||||
bind_status_label(window, "players");
|
||||
bind_status_label(window, "width");
|
||||
bind_status_label(window, "height");
|
||||
bind_status_label(window, "villages", _("/1000 tiles"));
|
||||
bind_status_label(window, "castle_size");
|
||||
bind_landform_status_label(window);
|
||||
}
|
||||
|
||||
void tgenerator_settings::bind_status_label(twindow& window, const std::string& id, const std::string& suffix)
|
||||
{
|
||||
tslider& slider = find_widget<tslider>(&window, id, false);
|
||||
tlabel& label = find_widget<tlabel>(&window, id + "_label", false);
|
||||
|
||||
label.set_label(std::to_string(slider.get_value()) + suffix);
|
||||
|
||||
connect_signal_notify_modified(slider, std::bind(&status_label_callback, this, std::ref(slider), std::ref(label), suffix));
|
||||
}
|
||||
|
||||
void tgenerator_settings::status_label_callback(tslider& slider, tlabel& label, const std::string& suffix)
|
||||
{
|
||||
label.set_label(std::to_string(slider.get_value()) + suffix);
|
||||
}
|
||||
|
||||
// TODO: remove
|
||||
void tgenerator_settings::bind_landform_status_label(twindow& window)
|
||||
{
|
||||
tslider& slider = find_widget<tslider>(&window, "landform", false);
|
||||
tlabel& label = find_widget<tlabel>(&window, "landform_label", false);
|
||||
|
||||
landform_status_label_callback(slider, label);
|
||||
|
||||
connect_signal_notify_modified(slider, std::bind(&landform_status_label_callback, this, std::ref(slider), std::ref(label)));
|
||||
}
|
||||
|
||||
// TODO: remove
|
||||
void tgenerator_settings::landform_status_label_callback(tslider& slider, tlabel& label)
|
||||
{
|
||||
label.set_label(slider.get_value() == 0 ? _("Inland") : (slider.get_value() < max_coastal ? _("Coastal") : _("Island")));
|
||||
}
|
||||
|
||||
void tgenerator_settings::adjust_minimum_size_by_players(twindow& window)
|
||||
{
|
||||
const int extra_size = (players_->get_widget_value(window) - 2) * extra_size_per_player;
|
||||
|
||||
const auto update_dimension_slider = [&](tfield_integer* field) {
|
||||
tslider& w = dynamic_cast<tslider&>(*field->widget());
|
||||
w.set_minimum_value(min_size + extra_size);
|
||||
|
||||
status_label_callback(w, find_widget<tlabel>(&window, w.id() + "_label", false));
|
||||
};
|
||||
|
||||
update_dimension_slider(width_);
|
||||
update_dimension_slider(height_);
|
||||
}
|
||||
|
||||
} // end namespace gui2
|
60
src/gui/dialogs/editor/generator_settings.hpp
Normal file
60
src/gui/dialogs/editor/generator_settings.hpp
Normal file
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
Copyright (C) 2010 - 2016 by the Battle for Wesnoth Project http://www.wesnoth.org/
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY.
|
||||
|
||||
See the COPYING file for more details.
|
||||
*/
|
||||
|
||||
#ifndef GUI_DIALOGS_GENERATOR_SETTINGS_HPP_INCLUDED
|
||||
#define GUI_DIALOGS_GENERATOR_SETTINGS_HPP_INCLUDED
|
||||
|
||||
#include "gui/dialogs/dialog.hpp"
|
||||
#include "generators/default_map_generator.hpp"
|
||||
|
||||
namespace gui2
|
||||
{
|
||||
|
||||
class tlabel;
|
||||
class tslider;
|
||||
|
||||
class tgenerator_settings : public tdialog
|
||||
{
|
||||
public:
|
||||
explicit tgenerator_settings(generator_data& data);
|
||||
|
||||
/** The execute function see @ref tdialog for more information. */
|
||||
static bool execute(generator_data& data, CVideo& video)
|
||||
{
|
||||
return tgenerator_settings(data).show(video);
|
||||
}
|
||||
|
||||
private:
|
||||
void pre_show(twindow& window);
|
||||
|
||||
void bind_status_label(twindow& window, const std::string& id, const std::string& suffix = "");
|
||||
void status_label_callback(tslider& slider, tlabel& label, const std::string& suffix = "");
|
||||
|
||||
// TODO: find a more generic way to do this
|
||||
void bind_landform_status_label(twindow& window);
|
||||
void landform_status_label_callback(tslider& slider, tlabel& label);
|
||||
|
||||
void adjust_minimum_size_by_players(twindow& window);
|
||||
|
||||
/** Inherited from tdialog, implemented by REGISTER_DIALOG. */
|
||||
virtual const std::string& window_id() const;
|
||||
|
||||
/** We need to own these fields to access the underlying widget */
|
||||
tfield_integer* players_;
|
||||
tfield_integer* width_;
|
||||
tfield_integer* height_;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif /* ! GUI_DIALOGS_GENERATOR_SETTINGS_HPP_INCLUDED */
|
|
@ -45,6 +45,7 @@
|
|||
#include "gui/dialogs/editor/edit_label.hpp"
|
||||
#include "gui/dialogs/editor/edit_scenario.hpp"
|
||||
#include "gui/dialogs/editor/generate_map.hpp"
|
||||
#include "gui/dialogs/editor/generator_settings.hpp"
|
||||
#include "gui/dialogs/editor/new_map.hpp"
|
||||
#include "gui/dialogs/editor/resize_map.hpp"
|
||||
#include "gui/dialogs/editor/set_starting_position.hpp"
|
||||
|
@ -402,6 +403,7 @@ BOOST_AUTO_TEST_CASE(test_gui2)
|
|||
test<gui2::tgame_save_oos>();
|
||||
//test<gui2::tgame_stats>();
|
||||
test<gui2::tgamestate_inspector>();
|
||||
//test<gui2::tgenerator_settings>();
|
||||
test<gui2::tlanguage_selection>();
|
||||
// test<gui2::tloadscreen>(); TODO: enable
|
||||
test<gui2::tlobby_main>();
|
||||
|
@ -489,6 +491,7 @@ BOOST_AUTO_TEST_CASE(test_gui2)
|
|||
"mp_host_game_prompt",
|
||||
"mp_create_game",
|
||||
"sp_options_configure",
|
||||
"generator_settings",
|
||||
};
|
||||
std::sort(list.begin(), list.end());
|
||||
std::sort(omitted.begin(), omitted.end());
|
||||
|
|
Loading…
Add table
Reference in a new issue