Blender V4.3
UI_interface.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#pragma once
10
11#include <functional>
12#include <memory>
13
14#include "BLI_function_ref.hh"
15#include "BLI_string_ref.hh"
16#include "BLI_vector.hh"
17
18#include "UI_resources.hh"
19
20#include "UI_interface_c.hh"
21
23struct GeometryAttributeInfo;
24}
25
26struct ARegion;
27struct bContext;
28struct PointerRNA;
29struct StructRNA;
30struct uiBlock;
31struct uiBut;
32struct uiLayout;
33struct uiList;
34struct uiSearchItems;
35struct wmDrag;
36struct wmEvent;
37namespace blender::ui {
38class AbstractView;
39class AbstractViewItem;
40} // namespace blender::ui
41
42void UI_but_func_set(uiBut *but, std::function<void(bContext &)> func);
43void UI_but_func_pushed_state_set(uiBut *but, std::function<bool(const uiBut &)> func);
44
49template<typename T> void but_func_argN_free(void *argN)
50{
51 MEM_delete(static_cast<T *>(argN));
52}
53
58template<typename T> void *but_func_argN_copy(const void *argN)
59{
60 return MEM_new<T>(__func__, *static_cast<const T *>(argN));
61}
62
63namespace blender::ui {
64
65class AbstractGridView;
66class AbstractTreeView;
67class DropTargetInterface;
68
74 /* Text to display in the UI. */
75 std::string name;
76 /* #BIFIconID */
77 int icon;
79};
80
82 StructRNA &rna_type,
83 void *ptr,
84 const BIFIconID icon_override = ICON_NONE);
85
86void template_breadcrumbs(uiLayout &layout, Span<ContextPathItem> context_path);
87
89 bool can_create_attribute,
91 uiSearchItems *items,
92 bool is_first);
93
95 blender::StringRef asset_shelf_idname,
96 ReportList &reports);
102enum class DropBehavior {
107 Reorder,
109 Insert,
115};
116
121enum class DropLocation {
122 Into,
123 Before,
124 After,
125};
126
137
152 public:
154 virtual ~DropTargetInterface() = default;
155
164 virtual bool can_drop(const wmDrag &drag, const char **r_disabled_hint) const = 0;
165
176 virtual std::optional<DropLocation> choose_drop_location(const ARegion &region,
177 const wmEvent &event) const;
184 virtual std::string drop_tooltip(const DragInfo &drag) const = 0;
189 virtual bool on_drop(bContext *C, const DragInfo &drag) const = 0;
190};
191
197 const ARegion &region,
198 const wmEvent &event,
199 const DropTargetInterface &drop_target,
200 const ListBase &drags);
205std::string drop_target_tooltip(const ARegion &region,
206 const DropTargetInterface &drop_target,
207 const wmDrag &drag,
208 const wmEvent &event);
209
215std::unique_ptr<DropTargetInterface> region_views_find_drop_target_at(const ARegion *region,
216 const int xy[2]);
217
218} // namespace blender::ui
219
228
235 /* Storage with an inline buffer for smaller strings (small buffer optimization). */
236 struct {
237 char filter_buff[32];
238 char *filter_dyn = nullptr;
239 } storage_;
240 char *filter_ = nullptr;
241
242 public:
245
248 int index);
249};
250
252 const PointerRNA &itemptr, blender::StringRefNull name, int index)>;
254 blender::FunctionRef<std::string(const PointerRNA &itemptr, int index)>;
255
268 const bContext *C,
269 uiListItemFilterFn item_filter_fn,
270 PointerRNA *dataptr,
271 const char *propname,
272 uiListItemGetNameFn get_name_fn = nullptr);
273
278 uiBlock &block,
279 blender::StringRef idname,
280 std::unique_ptr<blender::ui::AbstractGridView> grid_view);
282 uiBlock &block,
283 blender::StringRef idname,
284 std::unique_ptr<blender::ui::AbstractTreeView> tree_view);
void UI_but_func_set(uiBut *but, std::function< void(bContext &)> func)
void * but_func_argN_copy(const void *argN)
blender::ui::AbstractGridView * UI_block_add_view(uiBlock &block, blender::StringRef idname, std::unique_ptr< blender::ui::AbstractGridView > grid_view)
eUIListFilterResult
@ UI_LIST_ITEM_FILTER_MISMATCHES
@ UI_LIST_ITEM_NEVER_SHOW
@ UI_LIST_ITEM_FILTER_MATCHES
void but_func_argN_free(void *argN)
void UI_list_filter_and_sort_items(uiList *ui_list, const bContext *C, uiListItemFilterFn item_filter_fn, PointerRNA *dataptr, const char *propname, uiListItemGetNameFn get_name_fn=nullptr)
void UI_but_func_pushed_state_set(uiBut *but, std::function< bool(const uiBut &)> func)
int BIFIconID
virtual bool on_drop(bContext *C, const DragInfo &drag) const =0
virtual bool can_drop(const wmDrag &drag, const char **r_disabled_hint) const =0
virtual ~DropTargetInterface()=default
virtual std::string drop_tooltip(const DragInfo &drag) const =0
virtual std::optional< DropLocation > choose_drop_location(const ARegion &region, const wmEvent &event) const
eUIListFilterResult operator()(const PointerRNA &itemptr, blender::StringRefNull name, int index)
#define str(s)
bool asset_shelf_popover_invoke(bContext &C, blender::StringRef asset_shelf_idname, ReportList &reports)
void template_breadcrumbs(uiLayout &layout, Span< ContextPathItem > context_path)
bool drop_target_apply_drop(bContext &C, const ARegion &region, const wmEvent &event, const DropTargetInterface &drop_target, const ListBase &drags)
void attribute_search_add_items(StringRefNull str, bool can_create_attribute, Span< const nodes::geo_eval_log::GeometryAttributeInfo * > infos, uiSearchItems *items, bool is_first)
std::string drop_target_tooltip(const ARegion &region, const DropTargetInterface &drop_target, const wmDrag &drag, const wmEvent &event)
std::unique_ptr< DropTargetInterface > region_views_find_drop_target_at(const ARegion *region, const int xy[2])
void context_path_add_generic(Vector< ContextPathItem > &path, StructRNA &rna_type, void *ptr, const BIFIconID icon_override=ICON_NONE)
DragInfo(const wmDrag &drag, const wmEvent &event, DropLocation drop_location)
const wmDrag & drag_data
const DropLocation drop_location
const wmEvent & event
int xy[2]
Definition wm_draw.cc:170
PointerRNA * ptr
Definition wm_files.cc:4126