GUI2: move multi_page and stacked_widget init to their constructors

Makes it consistent with the listbox handling in 10b640c0f2
This commit is contained in:
Charles Dang 2024-12-10 06:54:56 -05:00
parent ebf9a2949a
commit 028e16d39b
4 changed files with 38 additions and 74 deletions

View file

@ -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<multi_page_definition>();
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_base> generator, const std::vector<widget_item>& 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<widget> builder_multi_page::build() const
{
auto widget = std::make_unique<multi_page>(*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<multi_page_definition>();
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;
}

View file

@ -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_base> generator, const std::vector<widget_item>& page_data);
/**
* Contains a pointer to the generator.
*

View file

@ -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<stacked_widget_definition>();
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_base> generator, const std::vector<builder_grid>& 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<widget> builder_stacked_widget::build() const
{
auto widget = std::make_unique<stacked_widget>(*this);
DBG_GUI_G << "Window builder: placed stacked widget '" << id
<< "' with definition '" << definition << "'.";
const auto conf = widget->cast_config_to<stacked_widget_definition>();
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;
}

View file

@ -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_base> generator, const std::vector<builder_grid>& widget_builders);
/**
* Contains a pointer to the generator.
*