19 #include <type_traits>
46 std::unique_ptr<AbstractView>
view;
52 std::unique_ptr<AbstractView>
view)
54 ViewLink *view_link = MEM_new<ViewLink>(__func__);
58 view_link->
idname = idname;
60 return dynamic_cast<T *
>(view_link->
view.get());
65 std::unique_ptr<AbstractGridView> grid_view)
67 return ui_block_add_view_impl<AbstractGridView>(block, idname, std::move(grid_view));
72 std::unique_ptr<AbstractTreeView> tree_view)
74 return ui_block_add_view_impl<AbstractTreeView>(block, idname, std::move(tree_view));
89 if (view_link->view->listen(*listener_params->
notifier)) {
119 if (view_link->view.get() == &
view) {
120 return view_link->idname;
142 if (old_view_link->idname == idname) {
143 return dynamic_cast<T *
>(old_view_link->view.get());
185 if (&old_item.
get_view() != old_view) {
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void ED_region_tag_redraw(struct ARegion *region)
struct uiViewHandle uiViewHandle
bool UI_view_item_matches(const uiViewItemHandle *a_handle, const uiViewItemHandle *b_handle)
struct uiViewItemHandle uiViewItemHandle
constexpr bool is_empty() const
AbstractView & get_view() const
uiBut uiBut * ui_view_item_find_active(const struct ARegion *region)
uiBut * ui_view_item_find_mouse_over(const struct ARegion *region, const int xy[2]) ATTR_NONNULL(1
uiButViewItem * ui_block_view_find_matching_view_item_but_in_old_block(const uiBlock *new_block, const uiViewItemHandle *new_item_handle)
uiViewItemHandle * UI_region_views_find_active_item(const ARegion *region)
void ui_block_free_views(uiBlock *block)
static StringRef ui_block_view_find_idname(const uiBlock &block, const AbstractView &view)
uiViewItemHandle * UI_region_views_find_item_at(const ARegion *region, const int xy[2])
AbstractGridView * UI_block_add_view(uiBlock &block, StringRef idname, std::unique_ptr< AbstractGridView > grid_view)
static T * ui_block_add_view_impl(uiBlock &block, StringRef idname, std::unique_ptr< AbstractView > view)
uiViewHandle * ui_block_view_find_matching_in_old_block(const uiBlock *new_block, const uiViewHandle *new_view_handle)
void UI_block_views_listen(const uiBlock *block, const wmRegionListenerParams *listener_params)
static T * ui_block_view_find_matching_in_old_block_impl(const uiBlock &new_block, const T &new_view)
std::unique_ptr< AbstractView > view
uiViewItemHandle * view_item
struct wmNotifier * notifier