1#ifndef TATOOINE_FLOWEXPLORER_UI_PIN_H
2#define TATOOINE_FLOWEXPLORER_UI_PIN_H
4#include <imgui-node-editor/imgui_node_editor.h>
34 auto draw(
size_t const icon_size,
float const alpha)
const -> void;
44 std::vector<std::type_info const*>
m_types;
45 struct link* m_link =
nullptr;
52 auto types() const -> auto const& {
return m_types; }
53 auto is_linked() const ->
bool override {
return m_link !=
nullptr; }
54 auto link() const -> auto const& {
return *m_link; }
55 auto link() ->
auto& {
return *m_link; }
62 auto get_linked_as() -> T&;
64 auto get_linked_as() const -> T const&;
65 auto linked_type() const -> std::type_info const&;
76template <
typename Prop>
115 virtual auto type() const -> std::type_info const& = 0;
117 template <typename T>
133 auto type() const -> std::type_info const&
override {
138 auto get_as() const -> T const& {
return m_ref; }
143 if (
typeid(T) != this->
type()) {
144 throw std::runtime_error{
"Types do not match."};
159template <
typename... Ts>
162 -> std::unique_ptr<input_pin> {
163 return std::make_unique<input_pin>(
164 n, std::vector{&
typeid(std::decay_t<Ts>)...},
title, t);
167template <
typename Prop>
169 -> std::unique_ptr<input_pin_property_link> {
170 return std::make_unique<input_pin_property_link_impl<Prop>>(
pin, prop);
176 -> std::unique_ptr<output_pin> {
177 return std::make_unique<output_pin_impl<T>>(n,
title, t, it);
Definition: draw_icon.h:6
auto make_output_pin(base::node &n, std::string const &title, T &t, icon_type const it=icon_type::flow) -> std::unique_ptr< output_pin >
Definition: pin.h:174
auto make_input_pin_property_link(input_pin &pin, Prop &prop) -> std::unique_ptr< input_pin_property_link >
Definition: pin.h:168
auto make_input_pin(base::node &n, std::string const &title, icon_type const t=icon_type::flow) -> std::unique_ptr< input_pin >
Definition: pin.h:160
pinkind
Definition: pinkind.h:6
icon_type
Definition: draw_icon.h:8
Definition: toggleable.h:6
virtual constexpr auto set_active(bool active=true) -> void
Definition: toggleable.h:18
auto output() const -> auto const &
Definition: link.h:36
auto get_as() const -> T const &
Definition: pin.h:138
virtual ~output_pin_impl()=default
T & m_ref
Definition: pin.h:126
auto type() const -> std::type_info const &override
Definition: pin.h:133
auto get_as() -> T &
Definition: pin.h:137
output_pin_impl(base::node &n, std::string const &title, T &ref, icon_type const t)
Definition: pin.h:129
auto set_active(bool active=true) -> void override
output_pin(base::node &n, std::string const &title, icon_type const t)
auto is_linked() const -> bool override
Definition: pin.h:112
virtual ~output_pin()=default
auto unlink(struct link &l) -> void
virtual auto type() const -> std::type_info const &=0
auto links() -> auto &
Definition: pin.h:114
auto unlink_all() -> void
auto links() const -> auto const &
Definition: pin.h:113
std::vector< struct link * > m_links
Definition: pin.h:99
auto unlink_from_input(struct link &l) -> void
auto get_as() -> T &
Definition: pin.h:142
auto link(struct link &l) -> void
auto kind() const
Definition: pin.h:33
auto node() const -> auto const &
Definition: pin.h:29
std::string m_title
Definition: pin.h:20
auto draw(size_t const icon_size, float const alpha) const -> void
virtual auto is_linked() const -> bool=0
auto set_icon_type(icon_type const t)
Definition: pin.h:35
pin(base::node &n, pinkind kind, std::string const &title, icon_type const t=icon_type::flow)
auto title() -> auto &
Definition: pin.h:31
icon_type m_icon_type
Definition: pin.h:23
auto node() -> auto &
Definition: pin.h:30
pinkind m_kind
Definition: pin.h:22
auto title() const -> auto const &
Definition: pin.h:32
base::node & m_node
Definition: pin.h:21
Definition: uuid_holder.h:11