6#ifndef KISPAINTOPOPTIONWIDGETUTILS_H
7#define KISPAINTOPOPTIONWIDGETUTILS_H
9#include <boost/tti/has_type.hpp>
10#include <boost/tti/has_member_function.hpp>
11#include <lager/state.hpp>
21BOOST_TTI_HAS_TYPE(data_type)
22BOOST_TTI_HAS_MEMBER_FUNCTION(lodLimitations)
24template <
typename Data,
typename... Args>
28 lager::state<std::remove_reference_t<Data>, lager::automatic_tag>
m_data;
31template <
bool needsConversion,
typename Widget,
typename Data,
typename... Args>
34template <
typename Widget,
typename Data,
typename... Args>
39 Widget(
DataStorage<Data, Args...>::m_data,
std::forward<Args>(args)...)
44template <
typename Widget,
typename Data,
typename... Args>
49 Widget(
DataStorage<Data, Args...>::m_data.zoom(
kislager::lenses::to_base<typename Widget::data_type>),
std::forward<Args>(args)...)
54template <
bool hasDataType,
typename Widget,
typename Data,
typename... Args>
57template <
typename Widget,
typename Data,
typename... Args>
64 using BaseClass::BaseClass;
67template <
typename Widget,
typename Data,
typename... Args>
75 using BaseClass::BaseClass;
78template <
typename Widget,
typename Data,
typename... Args>
81 has_type_data_type<Widget>::value, Widget, Data, Args...>
84 has_type_data_type<Widget>::value, Widget, Data, Args...>;
87 using BaseClass::BaseClass;
90template <
typename Widget,
typename Data,
typename... Args>
102 BaseClass::lodLimitationsReader(),
104 this->m_data.map(std::mem_fn(&Data::lodLimitations))));
124template <
typename Widget,
typename Data,
typename... Args>
127 return new detail::WidgetWrapper<Widget, Data, Args...>(std::forward<Data>(data), std::forward<Args>(args)...);
136template <
typename Widget,
typename Data,
typename... Args>
139 static_assert(detail::has_member_function_lodLimitations<
KisPaintopLodLimitations (Data::*)()
const>
::value,
"Data must have Data::lodLomitations() member function defined to use a widget with lod limitations generation");
153template <
typename W
idget>
156 static_assert(detail::has_type_data_type<Widget>::value,
"Widget must have 'data_type' member type defined to use the default construction method");
157 return createOptionWidget<Widget>(
typename Widget::data_type{});
173template <
typename W
idget>
176 static_assert(detail::has_type_data_type<Widget>::value,
"Widget must have 'data_type' member type defined to use the default construction method");
177 return createOptionWidgetWithLodLimitations<Widget>(
typename Widget::data_type{});
193template <
typename Data,
typename... Args>
196 return createOptionWidget<KisCurveOptionWidget>(std::forward<Data>(data), std::forward<Args>(args)...);
float value(const T *src, size_t ch)
std::optional< lager::reader< KisPaintopLodLimitations > > OptionalLodLimitationsReader
std::optional< lager::reader< T > > fold_optional_cursors(const Func &func, Cursors &&...cursors)