31class AbstractTreeView;
32class AbstractTreeViewItem;
33class TreeViewItemDropTarget;
86 template<
class ItemT,
typename... Args>
inline ItemT &
add_tree_item(Args &&...args);
118 std::shared_ptr<int> custom_height_ =
nullptr;
119 std::shared_ptr<int> scroll_value_ =
nullptr;
151 void update_children_from_old(
const AbstractView &old_view)
override;
152 static void update_children_from_old_recursive(
const TreeViewOrItem &new_items,
156 std::optional<int> tot_visible_row_count()
const;
158 bool supports_scrolling()
const override;
160 void draw_hierarchy_lines(
const ARegion ®ion,
const uiBlock &block)
const;
161 void get_hierarchy_lines(
const ARegion ®ion,
164 Vector<std::pair<int2, int2>> &lines,
165 int &visible_item_index)
const;
190 bool is_open_ =
false;
201 std::optional<std::string>
debug_name()
const override;
306 static
void tree_row_click_fn(
bContext *,
void *,
void *);
307 static
void collapse_chevron_click_fn(
bContext *,
void *but_arg1,
void *);
313 bool set_state_active() final;
315 void add_treerow_button(
uiBlock &block);
316 int indent_width() const;
317 void add_indent(
uiLayout &row) const;
318 void add_collapse_chevron(
uiBlock &block) const;
319 void add_rename_button(
uiLayout &row);
321 bool has_active_child() const;
349 void set_is_active_fn(
IsActiveFn is_active_fn);
361 static void tree_row_click_fn(
bContext *C,
void *arg1,
void *arg2);
391 std::optional<DropLocation> choose_drop_location(
const ARegion ®ion,
392 const wmEvent &event)
const override;
396 template<
class ViewType>
inline ViewType &get_view()
const;
409 std::optional<StringRef> search_string = {},
410 bool add_box =
true);
420template<
class ItemT,
typename... Args>
423 static_assert(std::is_base_of<AbstractTreeViewItem, ItemT>::value,
424 "Type must derive from and implement the AbstractTreeViewItem interface");
426 return dynamic_cast<ItemT &
>(
427 add_tree_item(std::make_unique<ItemT>(std::forward<Args>(args)...)));
432 static_assert(std::is_base_of<AbstractTreeView, ViewType>::value,
433 "Type must derive from and implement the ui::AbstractTreeView interface");
434 return dynamic_cast<ViewType &
>(view_item_.get_tree_view());
#define ENUM_OPERATORS(_type, _max)
Abstract base class for defining a customizable tree-view item.
std::optional< rctf > get_win_rect(const ARegion ®ion) const
void update_from_old(const AbstractViewItem &old) override
bool is_collapsed() const
void change_state_delayed() override
int count_parents() const
AbstractTreeView & get_tree_view() const
std::unique_ptr< DropTargetInterface > create_item_drop_target() final
bool is_collapsible() const
StringRef get_rename_string() const override
virtual void build_row(uiLayout &row)=0
bool matches(const AbstractViewItem &other) const override
void toggle_collapsed_from_view(bContext &C)
virtual std::unique_ptr< TreeViewItemDropTarget > create_drop_target()
virtual void on_collapse_change(bContext &C, bool is_collapsed)
~AbstractTreeViewItem() override=default
virtual std::optional< bool > should_be_collapsed() const
virtual bool set_collapsed(bool collapsed)
virtual bool matches_single(const AbstractTreeViewItem &other) const
std::optional< std::string > debug_name() const override
virtual bool supports_collapsing() const
void uncollapse_by_default()
bool rename(const bContext &C, StringRefNull new_name) override
friend class TreeViewItemAPIWrapper
void ensure_parents_uncollapsed()
AbstractTreeViewItem * find_hovered(const ARegion ®ion, const int2 &xy)
void scroll(ViewScrollDirection direction) override
void draw_overlays(const ARegion ®ion, const uiBlock &block) const override
~AbstractTreeView() override=default
virtual void build_tree()=0
void foreach_item(ItemIterFn iter_fn, IterOptions options=IterOptions::None) const
void set_default_rows(int default_rows)
virtual void on_activate(bContext &C)
virtual std::optional< bool > should_be_active() const
std::function< bool()> IsActiveFn
std::function< void(bContext &C, BasicTreeViewItem &new_active)> ActivateFn
ItemT & add_tree_item(Args &&...args)
AbstractTreeViewItem * parent_
TreeViewItemContainer * root_
void foreach_item_recursive(ItemIterFn iter_fn, IterOptions options=IterOptions::None) const
Vector< std::unique_ptr< AbstractTreeViewItem > > children_
void foreach_parent(ItemIterFn iter_fn) const
AbstractTreeViewItem & view_item_
const DropBehavior behavior_
ViewType & get_view() const
CCL_NAMESPACE_BEGIN struct Options options