|
Blender V5.0
|
#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< AbstractViewItemDragController > | create_drag_controller () const |
| virtual std::unique_ptr< DropTargetInterface > | create_item_drop_target () |
| virtual std::optional< std::string > | debug_name () const |
General Getters & Setters | |
| AbstractView & | get_view () const |
| uiButViewItem * | view_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 | |
| AbstractView * | view_ = nullptr |
| uiButViewItem * | view_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 |
Definition at line 190 of file UI_abstract_view.hh.
|
virtualdefault |
References AbstractView, C, and select.
|
protecteddefault |
Referenced by blender::ui::AbstractTreeViewItem::begin_renaming(), blender::ui::AbstractGridViewItem::build_grid_tile(), blender::ui::AbstractGridViewItem::matches(), blender::ui::AbstractTreeViewItem::matches(), matches(), blender::ui::AbstractTreeViewItem::update_from_old(), and update_from_old().
| 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().
| 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().
| 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().
|
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.
| 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().
| void blender::ui::AbstractViewItem::begin_renaming | ( | ) |
Definition at line 162 of file abstract_view_item.cc.
References AbstractView, get_rename_string(), get_view(), blender::ui::AbstractView::is_renaming(), is_renaming_, supports_renaming(), and view.
Referenced by UI_view_item_begin_rename().
|
virtual |
Reimplemented in blender::ed::asset::shelf::AssetViewItem, blender::ed::asset_browser::AssetCatalogTreeViewItem, blender::ed::object::shapekey::ShapeKeyItem, blender::ui::bonecollections::BoneCollectionItem, and blender::ui::greasepencil::LayerGroupViewItem.
Definition at line 272 of file abstract_view_item.cc.
Referenced by ui_popup_context_menu_for_button().
|
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().
|
virtual |
If an item wants to support being dragged, it has to return a drag controller here. That is an object implementing AbstractViewItemDragController.
Reimplemented in blender::ed::asset::shelf::AssetViewItem, 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 301 of file abstract_view_item.cc.
Referenced by UI_view_item_drag_start(), and UI_view_item_supports_drag().
|
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.
Reimplemented in blender::ui::AbstractGridViewItem, and blender::ui::AbstractTreeViewItem.
Definition at line 307 of file abstract_view_item.cc.
| void blender::ui::AbstractViewItem::deactivate | ( | ) |
Definition at line 94 of file abstract_view_item.cc.
References is_active_, and is_selected_.
|
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.
|
virtual |
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 256 of file abstract_view_item.cc.
Referenced by ui_view_item_delete_invoke().
| void blender::ui::AbstractViewItem::disable_activatable | ( | ) |
Definition at line 345 of file abstract_view_item.cc.
References is_activatable_.
Referenced by blender::ed::asset::shelf::AssetCatalogSelectorTree::Item::Item().
| 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_.
| void blender::ui::AbstractViewItem::end_renaming | ( | ) |
Definition at line 184 of file abstract_view_item.cc.
References AbstractView, blender::ui::AbstractView::end_renaming(), get_view(), is_renaming(), is_renaming_, and view.
Referenced by add_rename_button(), and rename_apply().
|
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().
| AbstractView & blender::ui::AbstractViewItem::get_view | ( | ) | const |
Get the view this item is registered for using #AbstractView::register_item().
Definition at line 331 of file abstract_view_item.cc.
References AbstractView, UNLIKELY, and view_.
Referenced by add_rename_button(), begin_renaming(), end_renaming(), blender::ui::find_first_view_item_but(), blender::ui::find_item_from_rename_button(), blender::ui::AbstractTreeViewItem::get_tree_view(), is_active(), is_filtered_visible(), is_selected(), rename_apply(), select_operator_view_and_item_find_xy(), set_state_active(), ui_block_view_find_matching_view_item_but_in_old_block(), UI_but_context_menu_title_from_button(), UI_view_item_can_rename(), UI_view_item_popup_keep_open(), and ViewLink::views_bounds_calc().
| 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().
| bool blender::ui::AbstractViewItem::is_filtered_visible | ( | ) | const |
Definition at line 289 of file abstract_view_item.cc.
References BLI_assert, get_view(), and is_filtered_visible_.
Referenced by blender::ui::TreeViewLayoutBuilder::build_from_tree(), and blender::ui::find_filtered_item_index().
| bool blender::ui::AbstractViewItem::is_interactive | ( | ) | const |
Definition at line 375 of file abstract_view_item.cc.
References is_interactive_.
Referenced by blender::ui::region_views_find_drop_target_at(), and ui_but_is_interactive_ex().
| bool blender::ui::AbstractViewItem::is_renaming | ( | ) | const |
Definition at line 157 of file abstract_view_item.cc.
References is_renaming_.
Referenced by blender::ui::TreeViewLayoutBuilder::build_row(), end_renaming(), and blender::ui::find_item_from_rename_button().
| 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().
| 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().
| bool blender::ui::AbstractViewItem::is_selected | ( | ) | const |
Definition at line 387 of file abstract_view_item.cc.
References BLI_assert_msg, get_view(), and is_selected_.
Referenced by change_state_delayed(), ui_view_item_delete_invoke(), view_item_click_select(), and widget_list_itembut().
|
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().
|
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().
|
virtual |
Reimplemented in blender::ui::AbstractTreeViewItem.
Definition at line 261 of file abstract_view_item.cc.
Referenced by blender::ui::AbstractView::filter().
|
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.
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().
| 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().
| 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().
|
virtual |
Reimplemented in blender::ed::object::shapekey::ShapeKeyItem.
Definition at line 105 of file abstract_view_item.cc.
References is_selected_, and select.
Referenced by activate(), change_state_delayed(), and view_item_click_select().
|
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.
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().
|
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().
|
protectedvirtual |
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().
|
virtual |
Reimplemented in blender::ed::object::shapekey::ShapeKeyItem.
Definition at line 100 of file abstract_view_item.cc.
Referenced by change_state_delayed().
|
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().
|
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.
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().
| 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().
|
friend |
Definition at line 191 of file UI_abstract_view.hh.
References AbstractView.
Referenced by AbstractView, add_rename_button(), begin_renaming(), end_renaming(), get_view(), rename_apply(), and ~AbstractViewItem().
|
friend |
Definition at line 192 of file UI_abstract_view.hh.
References ViewItemAPIWrapper.
Referenced by ViewItemAPIWrapper.
|
protected |
See activate_for_context_menu_set().
Definition at line 225 of file UI_abstract_view.hh.
Referenced by activate_for_context_menu(), and activate_for_context_menu_set().
|
protected |
Definition at line 202 of file UI_abstract_view.hh.
Referenced by disable_activatable(), and set_state_active().
|
protected |
Definition at line 204 of file UI_abstract_view.hh.
Referenced by blender::ui::TreeViewLayoutBuilder::build_row(), change_state_delayed(), deactivate(), is_active(), set_state_active(), and update_from_old().
|
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().
|
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().
|
protected |
Definition at line 209 of file UI_abstract_view.hh.
Referenced by blender::ui::AbstractView::clear_search_highlight(), blender::ui::AbstractView::filter(), is_search_highlight(), and update_from_old().
|
protected |
Definition at line 203 of file UI_abstract_view.hh.
Referenced by blender::ui::TreeViewLayoutBuilder::build_row(), disable_interaction(), and is_interactive().
|
protected |
Definition at line 207 of file UI_abstract_view.hh.
Referenced by begin_renaming(), end_renaming(), is_renaming(), and update_from_old().
|
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().
|
protected |
See always_reactivate_on_click().
Definition at line 223 of file UI_abstract_view.hh.
Referenced by activate(), and always_reactivate_on_click().
|
protected |
Definition at line 221 of file UI_abstract_view.hh.
Referenced by is_select_on_click(), and select_on_click_set().
|
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().
|
protected |
Definition at line 201 of file UI_abstract_view.hh.
Referenced by blender::ed::asset::shelf::AssetViewItem::build_grid_tile(), blender::ui::AbstractTreeViewItem::is_hovered(), blender::ui::ViewItemAPIWrapper::swap_button_pointers(), and view_item_button().