Blender V5.0
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
Active Item State
virtual bool set_state_active ()
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 ()
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 ()
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

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_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

Friends

class AbstractView
class ViewItemAPIWrapper

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)
virtual void delete_item (bContext *C)
virtual void on_filter_change ()
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 190 of file UI_abstract_view.hh.

Constructor & Destructor Documentation

◆ ~AbstractViewItem()

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

References AbstractView, C, and select.

◆ 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).

Also ensures the item is selected if it's active.

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 72 of file abstract_view_item.cc.

References is_active(), on_activate(), reactivate_on_click_, set_selected(), and set_state_active().

Referenced by activate_for_context_menu(), force_activate_view_item_but(), and view_item_click_select().

◆ activate_for_context_menu()

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

If activate_for_context_menu_set() was called, properly (re)activates the item including a #AbstractViewItem::on_activate() call. Otherwise, the item will only be highlighted as active, to indicate which item the context menu belongs to. Should be used when spawning a context menu for this item.

Definition at line 84 of file abstract_view_item.cc.

References activate(), activate_for_context_menu_, and set_state_active().

Referenced by ui_do_button().

◆ activate_for_context_menu_set()

void blender::ui::AbstractViewItem::activate_for_context_menu_set ( )

Call on_activate() when spawning a context menu. Otherwise the item will only be highlighted as active to indicate where the context menu was spawned from.

Definition at line 365 of file abstract_view_item.cc.

References activate_for_context_menu_.

Referenced by blender::ed::asset::shelf::AssetView::build_items().

◆ 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 226 of file abstract_view_item.cc.

References AbstractView, CTX_wm_region(), CTX_wm_region_popup(), end_renaming(), uiBlock::evil_C, get_view(), blender::ui::rename_button_fn(), 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.

◆ always_reactivate_on_click()

void blender::ui::AbstractViewItem::always_reactivate_on_click ( )

Call on_activate() on every click on the item, even when the item was active before.

Definition at line 360 of file abstract_view_item.cc.

References reactivate_on_click_.

Referenced by blender::ed::asset::shelf::AssetView::build_items().

◆ 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 116 of file abstract_view_item.cc.

References is_active_, is_selected(), set_selected(), set_state_active(), should_be_active(), and should_be_selected().

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 307 of file abstract_view_item.cc.

◆ deactivate()

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

Definition at line 94 of file abstract_view_item.cc.

References is_active_, and is_selected_.

◆ 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 313 of file abstract_view_item.cc.

◆ delete_item()

◆ 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 370 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::ed::object::shapekey::ShapeKeyItem, blender::ui::AbstractTreeViewItem, blender::ui::bonecollections::BoneCollectionItem, blender::ui::greasepencil::LayerGroupViewItem, and blender::ui::greasepencil::LayerViewItem.

Definition at line 151 of file abstract_view_item.cc.

Referenced by begin_renaming(), and should_be_filtered_visible().

◆ 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 380 of file abstract_view_item.cc.

References BLI_assert_msg, get_view(), and is_active_.

Referenced by activate(), blender::ui::AbstractTreeViewItem::change_state_delayed(), set_state_active(), ui_but_is_active_view_item(), ui_but_is_pushed_ex(), ui_view_item_delete_invoke(), view_item_click_select(), and widget_list_itembut().

◆ 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 394 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().

◆ is_select_on_click()

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

Definition at line 355 of file abstract_view_item.cc.

References select_on_click_.

Referenced by ui_view_item_select_invoke().

◆ is_selected()

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

◆ 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::object::shapekey::ShapeKeyItem, blender::ed::spreadsheet::DataSetViewItem, blender::ed::spreadsheet::InstancesTreeViewItem, blender::ed::spreadsheet::ViewerDataTreeItem, blender::ed::spreadsheet::ViewerPathTreeViewItem, blender::ui::bonecollections::BoneCollectionItem, blender::ui::greasepencil::LayerGroupViewItem, and blender::ui::greasepencil::LayerViewItem.

Definition at line 43 of file abstract_view_item.cc.

Referenced by activate().

◆ on_filter_change()

void blender::ui::AbstractViewItem::on_filter_change ( )
virtual

Reimplemented in blender::ui::AbstractTreeViewItem.

Definition at line 261 of file abstract_view_item.cc.

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

◆ 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::ed::object::shapekey::ShapeKeyItem, blender::ui::AbstractTreeViewItem, blender::ui::bonecollections::BoneCollectionItem, blender::ui::greasepencil::LayerGroupViewItem, and blender::ui::greasepencil::LayerViewItem.

Definition at line 145 of file abstract_view_item.cc.

Referenced by rename_apply().

◆ rename_apply()

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

Definition at line 177 of file abstract_view_item.cc.

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

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

◆ select_on_click_set()

void blender::ui::AbstractViewItem::select_on_click_set ( )

Configure this view item to only select/activate on mouse-click (i.e. when the mouse is pressed and released without much movement in-between); the default is to select/activate on mouse-press.

Definition at line 350 of file abstract_view_item.cc.

References select_on_click_.

Referenced by blender::ed::asset::shelf::AssetView::build_items().

◆ set_selected()

void blender::ui::AbstractViewItem::set_selected ( const bool select)
virtual

◆ set_state_active()

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

Like activate() but does not call on_activate(). Use it to reflect changes in the active state that happened externally. Or to simply highlight the item as active without triggering activation with an on_activate() call. E.g. this is done when spawning a context menu if activate_for_context_menu_set() wasn't called, to indicate which item the context menu belongs to.

Can be overridden to customize behavior but should always call the base class implementation.

Returns
true of the item was activated.

Definition at line 53 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(), activate_for_context_menu(), change_state_delayed(), and UI_view_item_drag_start().

◆ 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::object::shapekey::ShapeKeyItem, blender::ed::spreadsheet::DataSetViewItem, blender::ed::spreadsheet::InstancesTreeViewItem, blender::ed::spreadsheet::ViewerDataTreeItem, blender::ed::spreadsheet::ViewerPathTreeViewItem, blender::ui::bonecollections::BoneCollectionItem, blender::ui::greasepencil::LayerGroupViewItem, and blender::ui::greasepencil::LayerViewItem.

Definition at line 48 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 283 of file abstract_view_item.cc.

References blender::StringRefNull::c_str(), get_rename_string(), and name.

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

◆ should_be_selected()

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

Reimplemented in blender::ed::object::shapekey::ShapeKeyItem.

Definition at line 100 of file abstract_view_item.cc.

Referenced by change_state_delayed().

◆ 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::ed::object::shapekey::ShapeKeyItem, blender::ui::bonecollections::BoneCollectionItem, blender::ui::greasepencil::LayerGroupViewItem, and blender::ui::greasepencil::LayerViewItem.

Definition at line 140 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 29 of file abstract_view_item.cc.

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

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 ButType::ViewItem) 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 340 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 192 of file UI_abstract_view.hh.

References ViewItemAPIWrapper.

Referenced by ViewItemAPIWrapper.

Member Data Documentation

◆ activate_for_context_menu_

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

◆ is_activatable_

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

Definition at line 202 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 219 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 212 of file UI_abstract_view.hh.

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

◆ 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 207 of file UI_abstract_view.hh.

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

◆ is_selected_

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

Only change using set_selected() so overrides can sync changes to data.

Definition at line 206 of file UI_abstract_view.hh.

Referenced by deactivate(), is_selected(), set_selected(), and update_from_old().

◆ reactivate_on_click_

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

See always_reactivate_on_click().

Definition at line 223 of file UI_abstract_view.hh.

Referenced by activate(), and always_reactivate_on_click().

◆ select_on_click_

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

See select_on_click_set().

Definition at line 221 of file UI_abstract_view.hh.

Referenced by is_select_on_click(), and select_on_click_set().

◆ 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 199 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: