46 std::unique_ptr<AbstractView>
view;
54 std::unique_ptr<AbstractView>
view)
58 ViewLink *view_link = MEM_new<ViewLink>(__func__);
62 view_link->
idname = idname;
64 return dynamic_cast<T *
>(view_link->
view.get());
69 std::unique_ptr<AbstractGridView> grid_view)
76 std::unique_ptr<AbstractTreeView> tree_view)
95 views_bounds.
add(link->view.get(), minmax);
98 for (
const std::unique_ptr<uiBut> &but : block.
buttons) {
117 for (
const auto item : views_bounds.
items()) {
134 if (link->view.get() == &
view) {
147 if (stored_state->idname == idname) {
148 view.persistent_state_apply(stored_state->state);
156 if (link.
idname == stored_state->idname) {
174 if (std::optional<uiViewState> temp_state = link->view->persistent_state()) {
176 state_link->
state = *temp_state;
187 if (view_link->view->listen(*listener_params->
notifier)) {
196 view_link->view->draw_overlays(*region, *block);
210 float mx =
xy[0], my =
xy[1];
214 std::optional<rcti>
bounds = view_link->view->get_bounds();
224 return view_link->view.get();
261 view_link->view->clear_search_highlight();
272 if (std::unique_ptr<DropTargetInterface> target = item->create_item_drop_target()) {
280 if (std::unique_ptr<DropTargetInterface> target =
view->create_drop_target()) {
312 if (view_link->view.get() == &
view) {
313 return view_link->idname;
335 if (old_view_link->idname == idname) {
336 return dynamic_cast<T *
>(old_view_link->view.get());
363 for (
const std::unique_ptr<uiBut> &old_but : old_block->
buttons) {
373 if (&old_item.
get_view() != old_view) {
#define BLI_assert_unreachable()
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_addhead(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_rcti_init_minmax(struct rcti *rect)
void BLI_rcti_rctf_copy_round(struct rcti *dst, const struct rctf *src)
void BLI_rcti_pad(struct rcti *rect, int pad_x, int pad_y)
bool BLI_rcti_isect_pt(const struct rcti *rect, int x, int y)
bool BLI_rcti_is_empty(const struct rcti *rect)
void BLI_rcti_do_minmax_rcti(struct rcti *rect, const struct rcti *other)
void ED_region_tag_redraw(ARegion *region)
blender::ui::AbstractView * UI_region_view_find_at(const ARegion *region, const int xy[2], int pad)
const uiStyle * UI_style_get_dpi()
bool UI_view_item_matches(const blender::ui::AbstractViewItem &a, const blender::ui::AbstractViewItem &b)
blender::ui::AbstractViewItem * UI_region_views_find_item_at(const ARegion ®ion, const int xy[2])
int pad[32 - sizeof(int)]
bool add(const Key &key, const Value &value)
const Value & lookup(const Key &key) const
ItemIterator items() const &
constexpr bool is_empty() const
constexpr int64_t size() const
Abstract base class for defining a customizable tree-view item.
std::unique_ptr< DropTargetInterface > create_item_drop_target() final
bool is_interactive() const
AbstractView & get_view() const
void ui_window_to_block_fl(const ARegion *region, const uiBlock *block, float *x, float *y)
uiBut uiBut * ui_view_item_find_active(const ARegion *region)
uiBut * ui_view_item_find_mouse_over(const ARegion *region, const int xy[2]) ATTR_NONNULL(1
bool ui_region_contains_point_px(const ARegion *region, const int xy[2]) ATTR_NONNULL(1
void UI_region_views_clear_search_highlight(const ARegion *region)
blender::ui::AbstractView * UI_region_view_find_at(const ARegion *region, const int xy[2], const int pad)
void ui_block_views_end(ARegion *region, const uiBlock *block)
void ui_block_views_draw_overlays(const ARegion *region, const uiBlock *block)
void ui_block_view_persistent_state_restore(const ARegion ®ion, const uiBlock &block, ui::AbstractView &view)
uiButViewItem * ui_block_view_find_matching_view_item_but_in_old_block(const uiBlock &new_block, const ui::AbstractViewItem &new_item)
static T * ui_block_view_find_matching_in_old_block_impl(const uiBlock &new_block, const T &new_view)
AbstractGridView * UI_block_add_view(uiBlock &block, StringRef idname, std::unique_ptr< AbstractGridView > grid_view)
static uiViewStateLink * ensure_view_state(ARegion ®ion, const ViewLink &link)
void ui_block_free_views(uiBlock *block)
blender::ui::AbstractView * ui_block_view_find_matching_in_old_block(const uiBlock &new_block, const blender::ui::AbstractView &new_view)
ui::AbstractViewItem * UI_region_views_find_item_at(const ARegion ®ion, const int xy[2])
static StringRef ui_block_view_find_idname(const uiBlock &block, const AbstractView &view)
ui::AbstractViewItem * UI_region_views_find_active_item(const ARegion *region)
void ui_block_views_listen(const uiBlock *block, const wmRegionListenerParams *listener_params)
static T * ui_block_add_view_impl(uiBlock &block, StringRef idname, std::unique_ptr< AbstractView > view)
uiBut * UI_region_views_find_active_item_but(const ARegion *region)
void * MEM_callocN(size_t len, const char *str)
std::unique_ptr< DropTargetInterface > region_views_find_drop_target_at(const ARegion *region, const int xy[2])
ARegionRuntimeHandle * runtime
std::unique_ptr< AbstractView > view
static void views_bounds_calc(const uiBlock &block)
blender::Vector< std::unique_ptr< uiBut > > buttons
blender::ui::AbstractViewItem * view_item
const wmNotifier * notifier