Blender V5.0
blender::ui::AbstractTreeViewItem Class Referenceabstract

Abstract base class for defining a customizable tree-view item. More...

#include <UI_tree_view.hh>

Inherits blender::ui::AbstractViewItem, and blender::ui::TreeViewItemContainer.

Inherited by blender::ed::object::shapekey::ShapeKeyItem, blender::ed::spreadsheet::DataSetViewItem, blender::ed::spreadsheet::InstancesTreeViewItem, blender::ed::spreadsheet::ViewerDataTreeItem, blender::ed::spreadsheet::ViewerPathTreeViewItem, blender::ui::BasicTreeViewItem, blender::ui::bonecollections::BoneCollectionItem, blender::ui::greasepencil::LayerGroupViewItem, and blender::ui::greasepencil::LayerViewItem.

Public Member Functions

 ~AbstractTreeViewItem () override=default
virtual void build_row (uiLayout &row)=0
std::optional< std::string > debug_name () const override
std::unique_ptr< DropTargetInterfacecreate_item_drop_target () final
virtual std::unique_ptr< TreeViewItemDropTargetcreate_drop_target ()
AbstractTreeViewget_tree_view () const
std::optional< rctfget_win_rect (const ARegion &region) const
void begin_renaming ()
bool toggle_collapsed ()
virtual bool set_collapsed (bool collapsed)
virtual void on_collapse_change (bContext &C, bool is_collapsed)
virtual std::optional< bool > should_be_collapsed () const
void uncollapse_by_default ()
bool is_collapsed () const
bool is_collapsible () const
int count_parents () const
void on_filter_change () override
Public Member Functions inherited from blender::ui::AbstractViewItem
virtual ~AbstractViewItem ()=default
virtual void build_context_menu (bContext &C, uiLayout &column) const
virtual void on_activate (bContext &C)
virtual std::optional< bool > should_be_active () const
virtual std::optional< bool > should_be_selected () const
virtual void set_selected (const bool select)
void activate (bContext &C)
void activate_for_context_menu (bContext &C)
void deactivate ()
virtual std::unique_ptr< AbstractViewItemDragControllercreate_drag_controller () const
AbstractViewget_view () const
uiButViewItemview_item_button () const
void disable_interaction ()
bool is_interactive () const
void disable_activatable ()
void select_on_click_set ()
bool is_select_on_click () const
void always_reactivate_on_click ()
void activate_for_context_menu_set ()
bool is_active () const
bool is_selected () const
bool is_search_highlight () const
virtual bool supports_renaming () const
bool is_renaming () const
void begin_renaming ()
void end_renaming ()
void rename_apply (const bContext &C)
virtual void delete_item (bContext *C)
bool is_filtered_visible () const
Public Member Functions inherited from blender::ui::TreeViewItemContainer
template<class ItemT, typename... Args>
ItemT & add_tree_item (Args &&...args)
AbstractTreeViewItemadd_tree_item (std::unique_ptr< AbstractTreeViewItem > item)

Protected Member Functions

StringRef get_rename_string () const override
bool rename (const bContext &C, StringRefNull new_name) override
virtual bool supports_collapsing () const
void toggle_collapsed_from_view (bContext &C)
void change_state_delayed () override
bool matches (const AbstractViewItem &other) const override
void update_from_old (const AbstractViewItem &old) override
virtual bool matches_single (const AbstractTreeViewItem &other) const
bool is_hovered () const
void ensure_parents_uncollapsed ()
Protected Member Functions inherited from blender::ui::AbstractViewItem
 AbstractViewItem ()=default
void add_rename_button (uiBlock &block)
virtual bool should_be_filtered_visible (StringRefNull filter_string) const
Protected Member Functions inherited from blender::ui::TreeViewItemContainer
void foreach_item_recursive (ItemIterFn iter_fn, IterOptions options=IterOptions::None) const
void foreach_parent (ItemIterFn iter_fn) const

Protected Attributes

std::string label_
Protected Attributes inherited from blender::ui::AbstractViewItem
AbstractViewview_ = nullptr
uiButViewItemview_item_but_ = nullptr
bool is_activatable_ = true
bool is_interactive_ = true
bool is_active_ = false
bool is_selected_ = false
bool is_renaming_ = false
bool is_highlighted_search_ = false
bool is_filtered_visible_ = true
bool is_always_collapsible_ = false
bool select_on_click_ = false
bool reactivate_on_click_ = false
bool activate_for_context_menu_ = false
Protected Attributes inherited from blender::ui::TreeViewItemContainer
Vector< std::unique_ptr< AbstractTreeViewItem > > children_
TreeViewItemContainer * root_ = nullptr
AbstractTreeViewItemparent_ = nullptr
bool is_flat_ = false

Friends

class AbstractTreeView
class TreeViewLayoutBuilder
class TreeViewItemAPIWrapper

Additional Inherited Members

Public Types inherited from blender::ui::TreeViewItemContainer
enum class  IterOptions { None = 0 , SkipCollapsed = 1 << 0 , SkipFiltered = 1 << 1 }
using ItemIterFn = FunctionRef<void(AbstractTreeViewItem &)>

Detailed Description

Abstract base class for defining a customizable tree-view item.

The tree-view item defines how to build its data into a tree-row. There are implementations for common layouts, e.g. BasicTreeViewItem. It also stores state information that needs to be persistent over redraws, like the collapsed state.

Definition at line 212 of file UI_tree_view.hh.

Constructor & Destructor Documentation

◆ ~AbstractTreeViewItem()

blender::ui::AbstractTreeViewItem::~AbstractTreeViewItem ( )
overridedefault

Member Function Documentation

◆ begin_renaming()

◆ build_row()

virtual void blender::ui::AbstractTreeViewItem::build_row ( uiLayout & row)
pure virtual

Implemented in blender::ed::asset::shelf::AssetCatalogSelectorTree::Item, blender::ed::asset_browser::AssetCatalogTreeViewItem, blender::ed::object::shapekey::ShapeKeyItem, blender::ed::spreadsheet::BundleItem, blender::ed::spreadsheet::ClosureInputOutputItem, blender::ed::spreadsheet::CurvesDomainViewItem, blender::ed::spreadsheet::CurvesViewItem, blender::ed::spreadsheet::EvaluteClosureViewerPathItem, blender::ed::spreadsheet::ForeachElementViewerPathItem, blender::ed::spreadsheet::GreasePencilLayerCurvesDomainViewItem, blender::ed::spreadsheet::GreasePencilLayersViewItem, blender::ed::spreadsheet::GreasePencilLayerViewItem, blender::ed::spreadsheet::GreasePencilViewItem, blender::ed::spreadsheet::GroupNodeViewerPathItem, blender::ed::spreadsheet::IDViewerPathItem, blender::ed::spreadsheet::InstanceReferenceViewItem, blender::ed::spreadsheet::InstancesViewItem, blender::ed::spreadsheet::MeshDomainViewItem, blender::ed::spreadsheet::MeshViewItem, blender::ed::spreadsheet::ModifierViewerPathItem, blender::ed::spreadsheet::PointCloudViewItem, blender::ed::spreadsheet::PointsViewItem, blender::ed::spreadsheet::RepeatViewerPathItem, blender::ed::spreadsheet::RootGeometryViewItem, blender::ed::spreadsheet::SimulationViewerPathPathItem, blender::ed::spreadsheet::ViewerNodeItem, blender::ed::spreadsheet::ViewerNodeViewerPathItem, blender::ed::spreadsheet::VolumeGridsViewItem, blender::ui::BasicTreeViewItem, blender::ui::bonecollections::BoneCollectionItem, blender::ui::greasepencil::LayerGroupViewItem, and blender::ui::greasepencil::LayerViewItem.

References AbstractTreeView, create_drop_target(), final, get_tree_view(), and get_win_rect().

Referenced by blender::ui::TreeViewLayoutBuilder::build_row().

◆ change_state_delayed()

void blender::ui::AbstractTreeViewItem::change_state_delayed ( )
overrideprotectedvirtual

See #AbstractView::change_state_delayed(). Overrides should call the base class implementation.

Reimplemented from blender::ui::AbstractViewItem.

Definition at line 760 of file tree_view.cc.

References blender::ui::AbstractViewItem::change_state_delayed(), get_tree_view(), blender::ui::AbstractViewItem::is_active(), set_collapsed(), and should_be_collapsed().

Referenced by begin_renaming().

◆ count_parents()

◆ create_drop_target()

◆ create_item_drop_target()

std::unique_ptr< DropTargetInterface > blender::ui::AbstractTreeViewItem::create_item_drop_target ( )
finalvirtual

If an item wants to support dropping data into it, it has to return a drop target here. That is an object implementing DropTargetInterface.

Note
This drop target may be requested for each event. The view doesn't keep a drop target around currently. So it can not contain persistent state.

Reimplemented from blender::ui::AbstractViewItem.

Definition at line 629 of file tree_view.cc.

References create_drop_target().

Referenced by blender::ui::region_views_find_drop_target_at().

◆ debug_name()

std::optional< std::string > blender::ui::AbstractTreeViewItem::debug_name ( ) const
overridevirtual

View types should implement this to return some name or identifier of the item, which is helpful for debugging (there's nothing to identify the item just from the AbstractViewItem otherwise).

Reimplemented from blender::ui::AbstractViewItem.

Definition at line 639 of file tree_view.cc.

References label_.

◆ ensure_parents_uncollapsed()

void blender::ui::AbstractTreeViewItem::ensure_parents_uncollapsed ( )
protected

◆ get_rename_string()

StringRef blender::ui::AbstractTreeViewItem::get_rename_string ( ) const
overrideprotectedvirtual

◆ get_tree_view()

◆ get_win_rect()

std::optional< rctf > blender::ui::AbstractTreeViewItem::get_win_rect ( const ARegion & region) const

Calculate the view item rectangle from its view-item button, converted to window space. Returns an unset optional if there is no view item button for this item.

Definition at line 649 of file tree_view.cc.

References uiBut::block, uiBut::rect, ui_block_to_window_rctf(), and blender::ui::AbstractViewItem::view_item_button().

Referenced by build_row(), and blender::ui::AbstractTreeView::find_hovered().

◆ is_collapsed()

bool blender::ui::AbstractTreeViewItem::is_collapsed ( ) const

◆ is_collapsible()

bool blender::ui::AbstractTreeViewItem::is_collapsible ( ) const

◆ is_hovered()

bool blender::ui::AbstractTreeViewItem::is_hovered ( ) const
protected

Can be called from the #AbstractTreeViewItem::build_row() implementation, but not earlier. The hovered state can't be queried reliably otherwise. Note that this does a linear lookup in the old block, so isn't too great performance-wise.

Definition at line 682 of file tree_view.cc.

References BLI_assert_msg, uiBut::flag, get_tree_view(), ui_block_view_find_matching_view_item_but_in_old_block(), UI_HOVER, and blender::ui::AbstractViewItem::view_item_but_.

Referenced by begin_renaming(), and blender::ed::asset_browser::AssetCatalogTreeViewItem::build_row().

◆ matches()

bool blender::ui::AbstractTreeViewItem::matches ( const AbstractViewItem & other) const
overrideprotectedvirtual

◆ matches_single()

bool blender::ui::AbstractTreeViewItem::matches_single ( const AbstractTreeViewItem & other) const
protectedvirtual

Compare this item to other to check if they represent the same data. Used to recognize an item from a previous redraw, to be able to keep its state (e.g. open/closed, active, etc.). Items are only matched if their parents also match. By default this just matches the item's label (if the parents match!). If that isn't good enough for a sub-class, that can override it.

TODO matches_single() is a rather temporary name, used to indicate that this only compares the item itself, not the parents. Item matching is expected to change quite a bit anyway.

Definition at line 624 of file tree_view.cc.

References blender::ui::TreeViewItemContainer::AbstractTreeViewItem, and label_.

Referenced by begin_renaming(), and matches().

◆ on_collapse_change()

void blender::ui::AbstractTreeViewItem::on_collapse_change ( bContext & C,
bool is_collapsed )
virtual

Called when the view changes an item's state from expanded to collapsed, or vice versa. Will only be called if the state change is triggered through the view, not through external changes. E.g. a click on an item calls it, a change in the value returned by should_be_collapsed() to reflect an external state change does not.

Reimplemented in blender::ui::bonecollections::BoneCollectionItem, and blender::ui::greasepencil::LayerGroupViewItem.

Definition at line 728 of file tree_view.cc.

Referenced by begin_renaming(), and toggle_collapsed_from_view().

◆ on_filter_change()

◆ rename()

◆ set_collapsed()

bool blender::ui::AbstractTreeViewItem::set_collapsed ( bool collapsed)
virtual

Expand or collapse this tree view item.

Note
this does not call on_collapse_change().
Returns
true when the collapsed state was changed, false otherwise.

Reimplemented in blender::ui::bonecollections::BoneCollectionItem, and blender::ui::greasepencil::LayerGroupViewItem.

Definition at line 715 of file tree_view.cc.

References is_collapsible().

Referenced by begin_renaming(), change_state_delayed(), on_filter_change(), blender::ui::bonecollections::BoneCollectionItem::set_collapsed(), blender::ui::greasepencil::LayerGroupViewItem::set_collapsed(), and toggle_collapsed().

◆ should_be_collapsed()

std::optional< bool > blender::ui::AbstractTreeViewItem::should_be_collapsed ( ) const
virtual

If the result is not empty, it controls whether the item should be collapsed or not, usually depending on the data that the view represents.

Reimplemented in blender::ui::bonecollections::BoneCollectionItem, and blender::ui::greasepencil::LayerGroupViewItem.

Definition at line 733 of file tree_view.cc.

Referenced by begin_renaming(), and change_state_delayed().

◆ supports_collapsing()

bool blender::ui::AbstractTreeViewItem::supports_collapsing ( ) const
protectedvirtual

Return whether the item can be collapsed. Used to disable collapsing for items with children. The default implementation returns true.

Reimplemented in blender::ui::greasepencil::LayerViewItem.

Definition at line 598 of file tree_view.cc.

Referenced by begin_renaming(), is_collapsible(), and uncollapse_by_default().

◆ toggle_collapsed()

bool blender::ui::AbstractTreeViewItem::toggle_collapsed ( )

Toggle the expanded/collapsed state.

Note
this does not call on_collapse_change().
Returns
true when the collapsed state was changed, false otherwise.

Definition at line 703 of file tree_view.cc.

References set_collapsed().

Referenced by begin_renaming(), and toggle_collapsed_from_view().

◆ toggle_collapsed_from_view()

void blender::ui::AbstractTreeViewItem::toggle_collapsed_from_view ( bContext & C)
protected

Toggle the collapsed/expanded state, and call on_collapse_change() if it changed.

Definition at line 708 of file tree_view.cc.

References C, is_collapsed(), on_collapse_change(), and toggle_collapsed().

Referenced by begin_renaming().

◆ uncollapse_by_default()

◆ update_from_old()

void blender::ui::AbstractTreeViewItem::update_from_old ( const AbstractViewItem & old)
overrideprotectedvirtual

◆ AbstractTreeView

friend class AbstractTreeView
friend

Definition at line 213 of file UI_tree_view.hh.

References AbstractTreeView.

Referenced by AbstractTreeView, build_row(), and get_tree_view().

◆ TreeViewItemAPIWrapper

friend class TreeViewItemAPIWrapper
friend

Definition at line 216 of file UI_tree_view.hh.

References TreeViewItemAPIWrapper.

Referenced by TreeViewItemAPIWrapper.

◆ TreeViewLayoutBuilder

friend class TreeViewLayoutBuilder
friend

Definition at line 214 of file UI_tree_view.hh.

References TreeViewLayoutBuilder.

Referenced by TreeViewLayoutBuilder.

Member Data Documentation

◆ label_

std::string blender::ui::AbstractTreeViewItem::label_
protected

This label is used as the default way to identifying an item within its parent.

Definition at line 223 of file UI_tree_view.hh.

Referenced by blender::ui::BasicTreeViewItem::add_label(), blender::ui::BasicTreeViewItem::BasicTreeViewItem(), blender::ui::bonecollections::BoneCollectionItem::BoneCollectionItem(), blender::ed::asset_browser::AssetCatalogTreeViewItem::build_row(), blender::ed::object::shapekey::ShapeKeyItem::build_row(), blender::ed::spreadsheet::BundleItem::build_row(), blender::ed::spreadsheet::ClosureInputOutputItem::build_row(), blender::ed::spreadsheet::CurvesDomainViewItem::build_row(), blender::ed::spreadsheet::CurvesViewItem::build_row(), blender::ed::spreadsheet::EvaluteClosureViewerPathItem::build_row(), blender::ed::spreadsheet::ForeachElementViewerPathItem::build_row(), blender::ed::spreadsheet::GreasePencilLayerCurvesDomainViewItem::build_row(), blender::ed::spreadsheet::GreasePencilLayersViewItem::build_row(), blender::ed::spreadsheet::GreasePencilViewItem::build_row(), blender::ed::spreadsheet::InstancesViewItem::build_row(), blender::ed::spreadsheet::MeshDomainViewItem::build_row(), blender::ed::spreadsheet::MeshViewItem::build_row(), blender::ed::spreadsheet::PointCloudViewItem::build_row(), blender::ed::spreadsheet::PointsViewItem::build_row(), blender::ed::spreadsheet::RepeatViewerPathItem::build_row(), blender::ed::spreadsheet::RootGeometryViewItem::build_row(), blender::ed::spreadsheet::SimulationViewerPathPathItem::build_row(), blender::ed::spreadsheet::VolumeGridsViewItem::build_row(), blender::ed::spreadsheet::BundleItem::BundleItem(), blender::ed::spreadsheet::ClosureInputOutputItem::ClosureInputOutputItem(), blender::ed::spreadsheet::CurvesDomainViewItem::CurvesDomainViewItem(), blender::ed::spreadsheet::CurvesViewItem::CurvesViewItem(), debug_name(), blender::ed::spreadsheet::EvaluteClosureViewerPathItem::EvaluteClosureViewerPathItem(), blender::ed::spreadsheet::ForeachElementViewerPathItem::ForeachElementViewerPathItem(), blender::ed::object::shapekey::ShapeKeyItem::get_rename_string(), get_rename_string(), blender::ed::spreadsheet::GreasePencilLayerCurvesDomainViewItem::GreasePencilLayerCurvesDomainViewItem(), blender::ed::spreadsheet::GreasePencilLayersViewItem::GreasePencilLayersViewItem(), blender::ed::spreadsheet::GreasePencilLayerViewItem::GreasePencilLayerViewItem(), blender::ed::spreadsheet::GreasePencilViewItem::GreasePencilViewItem(), blender::ed::spreadsheet::GroupNodeViewerPathItem::GroupNodeViewerPathItem(), blender::ed::spreadsheet::IDViewerPathItem::IDViewerPathItem(), blender::ed::spreadsheet::InstanceReferenceViewItem::InstanceReferenceViewItem(), blender::ed::spreadsheet::InstancesViewItem::InstancesViewItem(), blender::ui::greasepencil::LayerGroupViewItem::LayerGroupViewItem(), blender::ui::greasepencil::LayerViewItem::LayerViewItem(), matches_single(), blender::ed::spreadsheet::MeshDomainViewItem::MeshDomainViewItem(), blender::ed::spreadsheet::MeshViewItem::MeshViewItem(), blender::ed::spreadsheet::ModifierViewerPathItem::ModifierViewerPathItem(), blender::ed::spreadsheet::PointCloudViewItem::PointCloudViewItem(), blender::ed::spreadsheet::PointsViewItem::PointsViewItem(), rename(), blender::ed::spreadsheet::RepeatViewerPathItem::RepeatViewerPathItem(), blender::ed::spreadsheet::RootGeometryViewItem::RootGeometryViewItem(), blender::ed::object::shapekey::ShapeKeyItem::ShapeKeyItem(), blender::ed::spreadsheet::SimulationViewerPathPathItem::SimulationViewerPathPathItem(), blender::ed::spreadsheet::ViewerNodeItem::ViewerNodeItem(), blender::ed::spreadsheet::ViewerNodeViewerPathItem::ViewerNodeViewerPathItem(), and blender::ed::spreadsheet::VolumeGridsViewItem::VolumeGridsViewItem().


The documentation for this class was generated from the following files: