diff --git a/src/gui/widgets/multi_page.cpp b/src/gui/widgets/multi_page.cpp index e1c2733b830..03c5f137f9d 100644 --- a/src/gui/widgets/multi_page.cpp +++ b/src/gui/widgets/multi_page.cpp @@ -36,8 +36,23 @@ REGISTER_WIDGET(multi_page) multi_page::multi_page(const implementation::builder_multi_page& builder) : container_base(builder, type()) , generator_(nullptr) - , page_builders_() + , page_builders_(builder.builders) { + const auto conf = cast_config_to(); + assert(conf); + + init_grid(*conf->grid); + + auto generator = generator_base::build(true, true, generator_base::independent, false); + + // Save our *non-owning* pointer before this gets moved into the grid. + generator_ = generator.get(); + assert(generator_); + + generator->create_items(-1, *page_builders_.begin()->second, builder.data, nullptr); + + // TODO: can we use the replacements system here? + swap_grid(nullptr, &get_grid(), std::move(generator), "_content_grid"); } grid& multi_page::add_page(const widget_item& item) @@ -138,16 +153,6 @@ unsigned multi_page::get_state() const return 0; } -void multi_page::finalize(std::unique_ptr generator, const std::vector& page_data) -{ - // Save our *non-owning* pointer before this gets moved into the grid. - generator_ = generator.get(); - assert(generator_); - - generator->create_items(-1, *page_builders_.begin()->second, page_data, nullptr); - swap_grid(nullptr, &get_grid(), std::move(generator), "_content_grid"); -} - bool multi_page::impl_draw_background() { /* DO NOTHING */ @@ -224,20 +229,7 @@ builder_multi_page::builder_multi_page(const config& cfg) std::unique_ptr builder_multi_page::build() const { auto widget = std::make_unique(*this); - - widget->set_page_builders(builders); - - DBG_GUI_G << "Window builder: placed multi_page '" << id - << "' with definition '" << definition << "'."; - - const auto conf = widget->cast_config_to(); - assert(conf); - - widget->init_grid(*conf->grid); - - auto generator = generator_base::build(true, true, generator_base::independent, false); - widget->finalize(std::move(generator), data); - + DBG_GUI_G << "Window builder: placed multi_page '" << id << "' with definition '" << definition << "'."; return widget; } diff --git a/src/gui/widgets/multi_page.hpp b/src/gui/widgets/multi_page.hpp index 5a1109a0d94..6747689837f 100644 --- a/src/gui/widgets/multi_page.hpp +++ b/src/gui/widgets/multi_page.hpp @@ -177,20 +177,6 @@ public: private: /***** ***** ***** setters / getters for members ***** ****** *****/ - void set_page_builders(const builder_grid_map& page_builders) - { - assert(!page_builders.empty()); - page_builders_ = page_builders; - } - - /** - * Finishes the building initialization of the widget. - * - * @param generator Generator for the list - * @param page_data The initial data to fill the widget with. - */ - void finalize(std::unique_ptr generator, const std::vector& page_data); - /** * Contains a pointer to the generator. * diff --git a/src/gui/widgets/stacked_widget.cpp b/src/gui/widgets/stacked_widget.cpp index 95f8ec12b7f..71309b1f57a 100644 --- a/src/gui/widgets/stacked_widget.cpp +++ b/src/gui/widgets/stacked_widget.cpp @@ -64,6 +64,26 @@ stacked_widget::stacked_widget(const implementation::builder_stacked_widget& bui , selected_layer_(-1) , find_in_all_layers_(false) { + const auto conf = cast_config_to(); + assert(conf); + + init_grid(*conf->grid); + + auto generator = generator_base::build(false, false, generator_base::independent, false); + + // Save our *non-owning* pointer before this gets moved into the grid. + generator_ = generator.get(); + assert(generator_); + + const widget_item empty_data; + for(const auto& layer_builder : builder.stack) { + generator->create_item(-1, layer_builder, empty_data, nullptr); + } + + // TODO: can we use the replacements system here? + swap_grid(nullptr, &get_grid(), std::move(generator), "_content_grid"); + + select_layer(-1); } bool stacked_widget::get_active() const @@ -84,21 +104,6 @@ void stacked_widget::layout_children() } } -void stacked_widget::finalize(std::unique_ptr generator, const std::vector& widget_builders) -{ - // Save our *non-owning* pointer before this gets moved into the grid. - generator_ = generator.get(); - assert(generator_); - - widget_item empty_data; - for(const auto & builder : widget_builders) { - generator->create_item(-1, builder, empty_data, nullptr); - } - swap_grid(nullptr, &get_grid(), std::move(generator), "_content_grid"); - - select_layer(-1); -} - void stacked_widget::set_self_active(const bool /*active*/) { /* DO NOTHING */ @@ -249,18 +254,7 @@ builder_stacked_widget::builder_stacked_widget(const config& real_cfg) std::unique_ptr builder_stacked_widget::build() const { auto widget = std::make_unique(*this); - - DBG_GUI_G << "Window builder: placed stacked widget '" << id - << "' with definition '" << definition << "'."; - - const auto conf = widget->cast_config_to(); - assert(conf); - - widget->init_grid(*conf->grid); - - auto generator = generator_base::build(false, false, generator_base::independent, false); - widget->finalize(std::move(generator), stack); - + DBG_GUI_G << "Window builder: placed stacked widget '" << id << "' with definition '" << definition << "'."; return widget; } diff --git a/src/gui/widgets/stacked_widget.hpp b/src/gui/widgets/stacked_widget.hpp index 2c2ffbe1fc7..cd0f244a494 100644 --- a/src/gui/widgets/stacked_widget.hpp +++ b/src/gui/widgets/stacked_widget.hpp @@ -118,14 +118,6 @@ public: } private: - /** - * Finishes the building initialization of the widget. - * - * @param generator Generator for the list - * @param widget_builders The builder to build the contents of the widget. - */ - void finalize(std::unique_ptr generator, const std::vector& widget_builders); - /** * Contains a pointer to the generator. *