psemek/libs/ui/include/psemek/ui/impl/container.hpp

36 lines
1.2 KiB
C++

#pragma once
#include <psemek/ui/impl/component.hpp>
#include <psemek/ui/key.hpp>
#include <psemek/util/signal.hpp>
#include <any>
#include <optional>
#include <vector>
namespace psemek::ui::impl
{
struct container
: component
{
virtual void set_children(std::vector<std::unique_ptr<component>> children);
virtual void set_children_token(util::signal<std::vector<std::any>>::subscription_token token);
virtual void set_child_tokens(std::vector<util::signal<std::any>::subscription_token> tokens);
virtual void set_child_keys(std::vector<std::optional<key>> keys);
virtual std::vector<std::unique_ptr<component>> release_children();
virtual util::signal<>::subscription_token release_children_token();
virtual std::vector<util::signal<>::subscription_token> release_child_tokens();
virtual std::vector<std::optional<key>> release_child_keys();
util::span<std::unique_ptr<component> const> children() const override;
private:
util::signal<>::subscription_token children_token_;
std::vector<std::unique_ptr<component>> children_;
std::vector<util::signal<>::subscription_token> child_tokens_;
std::vector<std::optional<key>> child_keys_;
};
}