diff --git a/examples/ui.cpp b/examples/ui.cpp index 59dd0f0d..e034bf6c 100644 --- a/examples/ui.cpp +++ b/examples/ui.cpp @@ -7,10 +7,12 @@ #include #include #include +#include #include #include +#include #include @@ -43,30 +45,35 @@ struct ui_example auto screen = element_factory.make_screen(); -// auto button = element_factory.make_button("Test"); -// button->on_click([button = button.get()]{ -// button->label()->set_text(std::string(button->label()->text()) + "0"); -// }); -// screen->add(button, ui::screen::x_policy::center, ui::screen::y_policy::center); + auto grid = element_factory.make_grid_layout(); + grid->set_size(1, 1); + auto button = element_factory.make_button("0,0"); + grid->set(0, 0, button); + button->on_click(util::recursive([this, grid](auto && self) -> void { + while (true) + { + for (std::size_t i = 0; i < grid->row_count(); ++i) + { + for (std::size_t j = 0; j < grid->column_count(); ++j) + { + if (!grid->get(i, j)) + { + auto button = element_factory.make_button(util::to_string(i, ",", j)); + grid->set(i, j, button); + button->on_click(self); + return; + } + } + } -// auto text = element_factory.make_label(lorem_ipsum); -// screen->add(text, ui::screen::x_policy::center, ui::screen::y_policy::center); + if (grid->row_count() <= grid->column_count()) + grid->set_row_count(grid->row_count() + 1); + else + grid->set_column_count(grid->column_count() + 1); + } + })); - auto text = element_factory.make_label(to_be); - text->set_overflow(ui::label::overflow_mode::ellipsis); - text->set_multiline(ui::label::multiline_mode::minimize_lines); - auto frame = element_factory.make_frame(); - frame->set_child(text); - screen->add_child(frame, ui::screen::x_policy::center, ui::screen::y_policy::center); - - auto updater = util::recursive([this, text, i = 0](auto && self) mutable -> void { - text->set_halign(static_cast(i % 3)); - text->set_valign(static_cast(i / 3)); - - i = (i + 1) % 9; - loop.post_at(async::clock::now() + std::chrono::milliseconds{1000}, self); - }); - updater(); + screen->add_child(grid, ui::screen::x_policy::center, ui::screen::y_policy::center); ui_controller.set_root(std::move(screen)); } diff --git a/libs/ui/include/psemek/ui/default_element_factory.hpp b/libs/ui/include/psemek/ui/default_element_factory.hpp index 236b019e..66942764 100644 --- a/libs/ui/include/psemek/ui/default_element_factory.hpp +++ b/libs/ui/include/psemek/ui/default_element_factory.hpp @@ -5,6 +5,7 @@ #include #include #include +#include #include @@ -23,6 +24,7 @@ namespace psemek::ui std::shared_ptr