Blender V4.5
blender::ui::AbstractViewItem Class Referenceabstract

#include <UI_abstract_view.hh>

Inherited by blender::ui::AbstractGridViewItem, and blender::ui::AbstractTreeViewItem.

Public Member Functions

virtual ~AbstractViewItem ()=default
Context Menu
virtual void build_context_menu (bContext &C, uiLayout &column) const
Drag 'n Drop
virtual std::unique_ptr< AbstractViewItemDragControllercreate_drag_controller () const
virtual std::unique_ptr< DropTargetInterfacecreate_item_drop_target ()
virtual std::optional< std::string > debug_name () const
General Getters & Setters
AbstractViewget_view () const
uiButViewItemview_item_button () const
void disable_interaction ()
bool is_interactive () const
void disable_activatable ()
bool is_active () const
bool is_search_highlight () const

Protected Member Functions

 AbstractViewItem ()=default
virtual bool matches (const AbstractViewItem &other) const =0
View Reconstruction
virtual void update_from_old (const AbstractViewItem &old)
General State Management
virtual void change_state_delayed ()

Protected Attributes

AbstractViewview_ = nullptr
uiButViewItemview_item_but_ = nullptr
bool is_activatable_ = true
bool is_interactive_ = true
bool is_active_ = false
bool is_renaming_ = false
bool is_highlighted_search_ = false
bool is_filtered_visible_ = true
bool is_always_collapsible_ = false

Friends

class AbstractView
class ViewItemAPIWrapper

Active Item State

virtual void on_activate (bContext &C)
virtual std::optional< bool > should_be_active () const
void activate (bContext &C)
void deactivate ()
virtual bool set_state_active ()

Renaming

virtual bool supports_renaming () const
virtual bool rename (const bContext &C, StringRefNull new_name)
virtual StringRef get_rename_string () const
bool is_renaming () const
void begin_renaming ()
void end_renaming ()
void rename_apply (const bContext &C)
void add_rename_button (uiBlock &block)

Filtering

bool is_filtered_visible () const
virtual bool should_be_filtered_visible (StringRefNull filter_string) const

Detailed Description

Definition at line 186 of file UI_abstract_view.hh.

Constructor & Destructor Documentation

◆ ~AbstractViewItem()

virtual blender::ui::AbstractViewItem::~AbstractViewItem ( )
virtualdefault

References AbstractView, and C.

◆ AbstractViewItem()

Member Function Documentation

◆ activate()

void blender::ui::AbstractViewItem::activate ( bContext & C)

Activates this item, deactivates other items, and calls the #AbstractViewItem::on_activate() function. Should only be called when the item was activated through the view (e.g. through a click), not if the view reflects an external change (e.g. #AbstractViewItem::should_be_active() changes from returning false to returning true).

Requires the view to have completed reconstruction, see #is_reconstructed(). Otherwise the actual item state is unknown, possibly calling state-change update functions incorrectly.

Definition at line 70 of file abstract_view_item.cc.

References on_activate(), and set_state_active().

Referenced by ui_do_button().

◆ add_rename_button()

void blender::ui::AbstractViewItem::add_rename_button ( uiBlock & block)
protected

Add a text button for renaming the item to block. This must be used for the built-in renaming to work. This button is meant to appear temporarily. It is removed when renaming is done.

Definition at line 194 of file abstract_view_item.cc.

References AbstractView, CTX_wm_region(), end_renaming(), uiBlock::evil_C, get_view(), blender::ui::rename_button_fn(), UI_BTYPE_TEXT, UI_but_active_only(), UI_but_flag_disable(), UI_but_func_rename_set(), UI_BUT_UNDO, UI_UNIT_X, UI_UNIT_Y, uiDefBut(), and view.

◆ begin_renaming()

void blender::ui::AbstractViewItem::begin_renaming ( )

◆ build_context_menu()

◆ change_state_delayed()

void blender::ui::AbstractViewItem::change_state_delayed ( )
protectedvirtual

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

Reimplemented in blender::ui::AbstractTreeViewItem.

Definition at line 88 of file abstract_view_item.cc.

References is_active_, set_state_active(), and should_be_active().

Referenced by blender::ui::AbstractTreeViewItem::change_state_delayed(), and blender::ui::AbstractView::change_state_delayed().

◆ create_drag_controller()

std::unique_ptr< AbstractViewItemDragController > blender::ui::AbstractViewItem::create_drag_controller ( ) const
virtual

◆ create_item_drop_target()

std::unique_ptr< DropTargetInterface > blender::ui::AbstractViewItem::create_item_drop_target ( )
virtual

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 in blender::ui::AbstractGridViewItem, and blender::ui::AbstractTreeViewItem.

Definition at line 263 of file abstract_view_item.cc.

◆ deactivate()

void blender::ui::AbstractViewItem::deactivate ( )

Definition at line 77 of file abstract_view_item.cc.

References is_active_.

◆ debug_name()

std::optional< std::string > blender::ui::AbstractViewItem::debug_name ( ) const
virtual

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 in blender::ui::AbstractGridViewItem, and blender::ui::AbstractTreeViewItem.

Definition at line 269 of file abstract_view_item.cc.

◆ disable_activatable()

void blender::ui::AbstractViewItem::disable_activatable ( )

◆ disable_interaction()

void blender::ui::AbstractViewItem::disable_interaction ( )

Disable the interacting with this item, meaning the buttons drawn will be disabled and there will be no mouse hover feedback for the view row.

Definition at line 306 of file abstract_view_item.cc.

References is_interactive_.

◆ end_renaming()

void blender::ui::AbstractViewItem::end_renaming ( )

◆ get_rename_string()

StringRef blender::ui::AbstractViewItem::get_rename_string ( ) const
virtual

Get the string that should be used for renaming, typically the item's label. This string will not be modified, but if the renaming is canceled, the value will be reset to this.

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

Definition at line 119 of file abstract_view_item.cc.

Referenced by begin_renaming().

◆ get_view()

◆ is_active()

bool blender::ui::AbstractViewItem::is_active ( ) const

Requires the view to have completed reconstruction, see #is_reconstructed(). Otherwise we can't be sure about the item state.

Definition at line 316 of file abstract_view_item.cc.

References BLI_assert_msg, get_view(), and is_active_.

Referenced by set_state_active(), ui_but_is_active_view_item(), and ui_but_is_pushed_ex().

◆ is_filtered_visible()

bool blender::ui::AbstractViewItem::is_filtered_visible ( ) const

◆ is_interactive()

bool blender::ui::AbstractViewItem::is_interactive ( ) const

◆ is_renaming()

bool blender::ui::AbstractViewItem::is_renaming ( ) const

◆ is_search_highlight()

bool blender::ui::AbstractViewItem::is_search_highlight ( ) const

Should this item be highlighted as matching search result? Only one item should be highlighted this way at a time. Pressing enter will activate it.

Definition at line 323 of file abstract_view_item.cc.

References is_highlighted_search_.

Referenced by blender::ui::AbstractView::search_highlight_item(), and ui_view_item_find_search_highlight().

◆ matches()

virtual bool blender::ui::AbstractViewItem::matches ( const AbstractViewItem & other) const
protectedpure virtual

Compare this item's identity to other to check if they represent the same data. Implementations can assume that the types match already (caller must check).

Used to recognize an item from a previous redraw, to be able to keep its state (e.g. active, renaming, etc.).

Implemented in blender::ui::AbstractGridViewItem, and blender::ui::AbstractTreeViewItem.

References AbstractViewItem().

Referenced by blender::ui::ViewItemAPIWrapper::matches().

◆ on_activate()

void blender::ui::AbstractViewItem::on_activate ( bContext & C)
virtual

Called when the view changes an item's state from inactive to active. 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_active() to reflect an external state change does not.

Reimplemented in blender::ed::asset::shelf::AssetViewItem, blender::ed::asset_browser::AssetCatalogTreeViewItem, blender::ed::spreadsheet::DataSetViewItem, blender::ed::spreadsheet::InstancesTreeViewItem, blender::ed::spreadsheet::ViewerPathTreeViewItem, blender::ui::bonecollections::BoneCollectionItem, blender::ui::greasepencil::LayerGroupViewItem, and blender::ui::greasepencil::LayerViewItem.

Definition at line 41 of file abstract_view_item.cc.

Referenced by activate().

◆ rename()

bool blender::ui::AbstractViewItem::rename ( const bContext & C,
StringRefNull new_name )
virtual

Try renaming the item, or the data it represents. Can assume #AbstractViewItem::supports_renaming() returned true. Sub-classes that override this should usually call this, unless they have a custom #AbstractViewItem.matches() implementation.

Returns
True if the renaming was successful.

Reimplemented in blender::ed::asset_browser::AssetCatalogTreeViewItem, blender::ui::AbstractTreeViewItem, blender::ui::bonecollections::BoneCollectionItem, blender::ui::greasepencil::LayerGroupViewItem, and blender::ui::greasepencil::LayerViewItem.

Definition at line 113 of file abstract_view_item.cc.

Referenced by rename_apply().

◆ rename_apply()

void blender::ui::AbstractViewItem::rename_apply ( const bContext & C)

Definition at line 145 of file abstract_view_item.cc.

References AbstractView, end_renaming(), get_view(), rename(), and view.

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

◆ set_state_active()

bool blender::ui::AbstractViewItem::set_state_active ( )
protectedvirtual

Like activate() but does not call on_activate(). Use it to reflect changes in the active state that happened externally. Can be overridden to customize behavior but should always call the base class implementation.

Returns
true of the item was activated.

Definition at line 51 of file abstract_view_item.cc.

References BLI_assert_msg, blender::ui::AbstractView::foreach_view_item(), get_view(), is_activatable_, is_active(), and is_active_.

Referenced by activate(), and change_state_delayed().

◆ should_be_active()

std::optional< bool > blender::ui::AbstractViewItem::should_be_active ( ) const
virtual

If the result is not empty, it controls whether the item should be active or not, usually depending on the data that the view represents. Note that since this is meant to reflect externally managed state changes, on_activate() will never be called if this returns true.

Reimplemented in blender::ed::asset::shelf::AssetViewItem, blender::ed::spreadsheet::DataSetViewItem, blender::ed::spreadsheet::InstancesTreeViewItem, blender::ed::spreadsheet::ViewerPathTreeViewItem, blender::ui::bonecollections::BoneCollectionItem, blender::ui::greasepencil::LayerGroupViewItem, and blender::ui::greasepencil::LayerViewItem.

Definition at line 46 of file abstract_view_item.cc.

Referenced by blender::ui::AbstractView::change_state_delayed(), and change_state_delayed().

◆ should_be_filtered_visible()

bool blender::ui::AbstractViewItem::should_be_filtered_visible ( StringRefNull filter_string) const
protectedvirtual
Note
Do not call this directly to avoid constantly rechecking the filter state. Instead use is_filtered_visible() for querying.

Reimplemented in blender::ed::asset::shelf::AssetViewItem.

Definition at line 240 of file abstract_view_item.cc.

Referenced by blender::ui::AbstractView::filter().

◆ supports_renaming()

bool blender::ui::AbstractViewItem::supports_renaming ( ) const
virtual

Queries if the view item supports renaming in principle. Renaming may still fail, e.g. if another item is already being renamed.

Reimplemented in blender::ed::asset_browser::AssetCatalogTreeViewItem, blender::ui::bonecollections::BoneCollectionItem, blender::ui::greasepencil::LayerGroupViewItem, and blender::ui::greasepencil::LayerViewItem.

Definition at line 108 of file abstract_view_item.cc.

Referenced by begin_renaming(), and UI_view_item_can_rename().

◆ update_from_old()

void blender::ui::AbstractViewItem::update_from_old ( const AbstractViewItem & old)
protectedvirtual

Copy persistent state (e.g. active, selection, etc.) from a matching item of the last redraw to this item. If sub-classes introduce more advanced state they should override this and make it update their state accordingly.

Note
Always call the base class implementation when overriding this!

Reimplemented in blender::ui::AbstractTreeViewItem.

Definition at line 28 of file abstract_view_item.cc.

References AbstractViewItem(), is_active_, is_highlighted_search_, and is_renaming_.

Referenced by blender::ui::AbstractTreeViewItem::update_from_old().

◆ view_item_button()

uiButViewItem * blender::ui::AbstractViewItem::view_item_button ( ) const

Get the view item button (button of type UI_BTYPE_VIEW_ITEM) created for this item. Every visible item gets one during the layout building. Items that are not visible may not have one, so null is a valid return value.

Definition at line 296 of file abstract_view_item.cc.

References view_item_but_.

Referenced by blender::ed::asset::shelf::AssetViewItem::build_grid_tile(), blender::ui::PreviewGridItem::build_grid_tile_button(), blender::ed::asset_browser::AssetCatalogTreeViewItem::build_row(), blender::ed::spreadsheet::draw_row_suffix(), and blender::ui::AbstractTreeViewItem::get_win_rect().

◆ AbstractView

friend class AbstractView
friend

◆ ViewItemAPIWrapper

friend class ViewItemAPIWrapper
friend

Definition at line 188 of file UI_abstract_view.hh.

References ViewItemAPIWrapper.

Referenced by ViewItemAPIWrapper.

Member Data Documentation

◆ is_activatable_

bool blender::ui::AbstractViewItem::is_activatable_ = true
protected

Definition at line 198 of file UI_abstract_view.hh.

Referenced by disable_activatable(), and set_state_active().

◆ is_active_

bool blender::ui::AbstractViewItem::is_active_ = false
protected

◆ is_always_collapsible_

bool blender::ui::AbstractViewItem::is_always_collapsible_ = false
protected

Typically, only items with children can be collapsed. However, in some cases it's important to draw collapsible items differently from non-collapsible ones, even if they don't have children currently.

Definition at line 213 of file UI_abstract_view.hh.

Referenced by blender::ui::AbstractTreeViewItem::is_collapsible().

◆ is_filtered_visible_

bool blender::ui::AbstractViewItem::is_filtered_visible_ = true
protected

Cache filtered state here to avoid having to re-query.

Definition at line 206 of file UI_abstract_view.hh.

Referenced by blender::ui::AbstractView::filter(), and is_filtered_visible().

◆ is_highlighted_search_

bool blender::ui::AbstractViewItem::is_highlighted_search_ = false
protected

◆ is_interactive_

bool blender::ui::AbstractViewItem::is_interactive_ = true
protected

◆ is_renaming_

bool blender::ui::AbstractViewItem::is_renaming_ = false
protected

Definition at line 201 of file UI_abstract_view.hh.

Referenced by begin_renaming(), end_renaming(), is_renaming(), and update_from_old().

◆ view_

AbstractView* blender::ui::AbstractViewItem::view_ = nullptr
protected

The view this item is a part of, and was registered for using #AbstractView::register_item(). If this wasn't done, the behavior of items is undefined.

Definition at line 195 of file UI_abstract_view.hh.

Referenced by blender::ui::AbstractGridViewItem::get_view(), get_view(), and blender::ui::AbstractView::register_item().

◆ view_item_but_


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