Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/interface/interface_view.cc
| Show First 20 Lines • Show All 50 Lines • ▼ Show 20 Lines | |||||
| }; | }; | ||||
| template<class T> T *get_view_from_link(ViewLink &link) | template<class T> T *get_view_from_link(ViewLink &link) | ||||
| { | { | ||||
| auto *t_uptr = std::get_if<std::unique_ptr<T>>(&link.view); | auto *t_uptr = std::get_if<std::unique_ptr<T>>(&link.view); | ||||
| return t_uptr ? t_uptr->get() : nullptr; | return t_uptr ? t_uptr->get() : nullptr; | ||||
| } | } | ||||
| /** | |||||
| * Override this for all available tree types. | |||||
| */ | |||||
| AbstractTreeView *UI_block_add_view(uiBlock &block, | AbstractTreeView *UI_block_add_view(uiBlock &block, | ||||
| StringRef idname, | StringRef idname, | ||||
| std::unique_ptr<AbstractTreeView> tree_view) | std::unique_ptr<AbstractTreeView> tree_view) | ||||
| { | { | ||||
| ViewLink *view_link = OBJECT_GUARDED_NEW(ViewLink); | ViewLink *view_link = OBJECT_GUARDED_NEW(ViewLink); | ||||
| BLI_addtail(&block.views, view_link); | BLI_addtail(&block.views, view_link); | ||||
| view_link->view = std::move(tree_view); | view_link->view = std::move(tree_view); | ||||
| view_link->idname = idname; | view_link->idname = idname; | ||||
| return get_view_from_link<AbstractTreeView>(*view_link); | return get_view_from_link<AbstractTreeView>(*view_link); | ||||
| } | } | ||||
| void ui_block_free_views(uiBlock *block) | void ui_block_free_views(uiBlock *block) | ||||
| { | { | ||||
| LISTBASE_FOREACH_MUTABLE (ViewLink *, link, &block->views) { | LISTBASE_FOREACH_MUTABLE (ViewLink *, link, &block->views) { | ||||
| OBJECT_GUARDED_DELETE(link, ViewLink); | OBJECT_GUARDED_DELETE(link, ViewLink); | ||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * \param x, y: Coordinate to find a tree-row item at, in window space. | |||||
| */ | |||||
| uiTreeViewItemHandle *UI_block_tree_view_find_item_at(const ARegion *region, const int xy[2]) | uiTreeViewItemHandle *UI_block_tree_view_find_item_at(const ARegion *region, const int xy[2]) | ||||
| { | { | ||||
| uiButTreeRow *tree_row_but = (uiButTreeRow *)ui_tree_row_find_mouse_over(region, xy); | uiButTreeRow *tree_row_but = (uiButTreeRow *)ui_tree_row_find_mouse_over(region, xy); | ||||
| if (!tree_row_but) { | if (!tree_row_but) { | ||||
| return nullptr; | return nullptr; | ||||
| } | } | ||||
| return tree_row_but->tree_item; | return tree_row_but->tree_item; | ||||
| ▲ Show 20 Lines • Show All 94 Lines • Show Last 20 Lines | |||||