From 71a6d1bbe2d65a516e795e181893c4fa9e849265 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Fri, 15 Oct 2021 22:32:44 +0300 Subject: [PATCH] Task management lib (wip) --- libs/tasks/CMakeLists.txt | 6 +++ libs/tasks/include/psemek/tasks/ui.hpp | 13 ++++++ libs/tasks/source/ui.cpp | 56 ++++++++++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 libs/tasks/CMakeLists.txt create mode 100644 libs/tasks/include/psemek/tasks/ui.hpp create mode 100644 libs/tasks/source/ui.cpp diff --git a/libs/tasks/CMakeLists.txt b/libs/tasks/CMakeLists.txt new file mode 100644 index 00000000..b1b8915b --- /dev/null +++ b/libs/tasks/CMakeLists.txt @@ -0,0 +1,6 @@ +file(GLOB_RECURSE PSEMEK_TASKS_HEADERS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "include/*.hpp") +file(GLOB_RECURSE PSEMEK_TASKS_SOURCES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "source/*.cpp") + +psemek_add_library(psemek-tasks ${PSEMEK_TASKS_HEADERS} ${PSEMEK_TASKS_SOURCES}) +target_include_directories(psemek-tasks PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include") +target_link_libraries(psemek-tasks PUBLIC psemek-util psemek-log psemek-ui) diff --git a/libs/tasks/include/psemek/tasks/ui.hpp b/libs/tasks/include/psemek/tasks/ui.hpp new file mode 100644 index 00000000..77266759 --- /dev/null +++ b/libs/tasks/include/psemek/tasks/ui.hpp @@ -0,0 +1,13 @@ +#pragma once + +#include +#include + +#include + +namespace psemek::tasks +{ + + std::shared_ptr make_ui(ui::element_factory & factory, std::filesystem::path const & storage); + +} diff --git a/libs/tasks/source/ui.cpp b/libs/tasks/source/ui.cpp new file mode 100644 index 00000000..b382b7e2 --- /dev/null +++ b/libs/tasks/source/ui.cpp @@ -0,0 +1,56 @@ +#include + +#include + +namespace psemek::tasks +{ + + std::shared_ptr make_ui(ui::element_factory & factory, std::filesystem::path const & storage) + { + (void)storage; + auto window = factory.make_window("Task manager"); + + auto grid = factory.make_grid_layout(); + window->set_child(grid); + + grid->set_size(1, 3); + + auto frame_own_style = std::make_shared(); + frame_own_style->bevel_width = 4; + frame_own_style->bevel_type = ui::bevel_type::down; + frame_own_style->shadow_offset = {0, 0}; + + auto frame_style = std::make_shared(); + frame_style->text_scale = 1; + + for (int i = 0; i < grid->column_count(); ++i) + { + auto frame = factory.make_frame(); + auto scroller = factory.make_scroller(); + auto layout = factory.make_grid_layout(); + frame->set_child(scroller); + scroller->set_child(layout); + grid->set(0, i, frame); + frame->set_own_style(frame_own_style); + frame->set_style(frame_style); + + if (i == 1) + { + scroller->set_vertical_scroll(false); + scroller->set_horizontal_scroll(true); + } + + auto add_button = util::recursive([&factory, layout](auto && self) -> void { + auto button = factory.make_button("Test"); + button->on_click(self); + layout->add_row(button); + }); + + for (int j = 0; j < 5; ++j) + add_button(); + } + + return window; + } + +}