Blender V5.0
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
8
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" // IWYU pragma: export
21
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;
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
68
74 /* Text to display in the UI. */
75 std::string name;
76 /* #BIFIconID */
77 int icon;
79
80 std::function<void(bContext &)> handle_func;
81};
82
84 StructRNA &rna_type,
85 void *ptr,
86 const BIFIconID icon_override = ICON_NONE,
87 std::function<void(bContext &)> handle_func = nullptr);
88
89void template_breadcrumbs(uiLayout &layout, Span<ContextPathItem> context_path);
90
92 bool can_create_attribute,
94 uiSearchItems *items,
95 bool is_first);
97 Span<const std::string *> layer_names,
98 uiSearchItems &items,
99 bool is_first);
100
102 blender::StringRef asset_shelf_idname,
103 ReportList &reports);
123
133
144
159 public:
161 virtual ~DropTargetInterface() = default;
162
171 virtual bool can_drop(const wmDrag &drag, const char **r_disabled_hint) const = 0;
172
183 virtual std::optional<DropLocation> choose_drop_location(const ARegion &region,
184 const wmEvent &event) const;
191 virtual std::string drop_tooltip(const DragInfo &drag) const = 0;
196 virtual bool on_drop(bContext *C, const DragInfo &drag) const = 0;
197};
198
204 const ARegion &region,
205 const wmEvent &event,
206 const DropTargetInterface &drop_target,
207 const ListBase &drags);
212std::string drop_target_tooltip(const ARegion &region,
213 const DropTargetInterface &drop_target,
214 const wmDrag &drag,
215 const wmEvent &event);
216
222std::unique_ptr<DropTargetInterface> region_views_find_drop_target_at(const ARegion *region,
223 const int xy[2]);
224
225} // namespace blender::ui
226
235
242 /* Storage with an inline buffer for smaller strings (small buffer optimization). */
243 struct {
244 char filter_buff[32];
245 char *filter_dyn = nullptr;
246 } storage_;
247 char *filter_ = nullptr;
248
249 public:
252
255 int index);
256};
257
259 const PointerRNA &itemptr, blender::StringRefNull name, int index)>;
261 blender::FunctionRef<std::string(const PointerRNA &itemptr, int index)>;
262
279 const bContext *C,
280 uiListItemFilterFn item_filter_fn,
281 PointerRNA *dataptr,
282 const char *propname,
283 uiListItemGetNameFn get_name_fn = nullptr);
284
291 uiBlock &block,
292 blender::StringRef idname,
293 std::unique_ptr<blender::ui::AbstractGridView> grid_view);
295 uiBlock &block,
296 blender::StringRef idname,
297 std::unique_ptr<blender::ui::AbstractTreeView> tree_view);
298
299void UI_alert(bContext *C,
300 blender::StringRef title,
301 blender::StringRef message,
302 eAlertIcon icon,
303 bool compact);
int BIFIconID
Definition ED_asset.hh:28
#define C
Definition RandGen.cpp:29
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)
blender::FunctionRef< std::string(const PointerRNA &itemptr, int index)> uiListItemGetNameFn
eUIListFilterResult
@ UI_LIST_ITEM_FILTER_MISMATCHES
@ UI_LIST_ITEM_NEVER_SHOW
@ UI_LIST_ITEM_FILTER_MATCHES
blender::FunctionRef< eUIListFilterResult( const PointerRNA &itemptr, blender::StringRefNull name, int index)> uiListItemFilterFn
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)
void UI_alert(bContext *C, blender::StringRef title, blender::StringRef message, eAlertIcon icon, bool compact)
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)
#define T
bool asset_shelf_popover_invoke(bContext &C, blender::StringRef asset_shelf_idname, ReportList &reports)
void template_breadcrumbs(uiLayout &layout, Span< ContextPathItem > context_path)
void grease_pencil_layer_search_add_items(StringRef str, Span< const std::string * > layer_names, uiSearchItems &items, bool is_first)
void context_path_add_generic(Vector< ContextPathItem > &path, StructRNA &rna_type, void *ptr, const BIFIconID icon_override=ICON_NONE, std::function< void(bContext &)> handle_func=nullptr)
bool drop_target_apply_drop(bContext &C, const ARegion &region, const wmEvent &event, const DropTargetInterface &drop_target, const ListBase &drags)
std::string drop_target_tooltip(const ARegion &region, const DropTargetInterface &drop_target, const wmDrag &drag, const wmEvent &event)
void attribute_search_add_items(StringRef str, bool can_create_attribute, Span< const nodes::geo_eval_log::GeometryAttributeInfo * > infos, uiSearchItems *items, bool is_first)
std::unique_ptr< DropTargetInterface > region_views_find_drop_target_at(const ARegion *region, const int xy[2])
const char * name
std::function< void(bContext &)> handle_func
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:178
PointerRNA * ptr
Definition wm_files.cc:4238