Blender V4.5
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
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);
94 Span<const std::string *> layer_names,
95 uiSearchItems &items,
96 bool is_first);
97
99 blender::StringRef asset_shelf_idname,
120
130
141
156 public:
158 virtual ~DropTargetInterface() = default;
159
168 virtual bool can_drop(const wmDrag &drag, const char **r_disabled_hint) const = 0;
169
180 virtual std::optional<DropLocation> choose_drop_location(const ARegion &region,
181 const wmEvent &event) const;
188 virtual std::string drop_tooltip(const DragInfo &drag) const = 0;
193 virtual bool on_drop(bContext *C, const DragInfo &drag) const = 0;
194};
195
201 const ARegion &region,
202 const wmEvent &event,
203 const DropTargetInterface &drop_target,
204 const ListBase &drags);
209std::string drop_target_tooltip(const ARegion &region,
210 const DropTargetInterface &drop_target,
211 const wmDrag &drag,
212 const wmEvent &event);
213
219std::unique_ptr<DropTargetInterface> region_views_find_drop_target_at(const ARegion *region,
220 const int xy[2]);
221
222} // namespace blender::ui
223
232
239 /* Storage with an inline buffer for smaller strings (small buffer optimization). */
240 struct {
241 char filter_buff[32];
242 char *filter_dyn = nullptr;
243 } storage_;
244 char *filter_ = nullptr;
245
246 public:
249
252 int index);
253};
254
256 const PointerRNA &itemptr, blender::StringRefNull name, int index)>;
258 blender::FunctionRef<std::string(const PointerRNA &itemptr, int index)>;
259
272 const bContext *C,
273 uiListItemFilterFn item_filter_fn,
274 PointerRNA *dataptr,
275 const char *propname,
276 uiListItemGetNameFn get_name_fn = nullptr);
277
284 uiBlock &block,
285 blender::StringRef idname,
286 std::unique_ptr<blender::ui::AbstractGridView> grid_view);
288 uiBlock &block,
289 blender::StringRef idname,
290 std::unique_ptr<blender::ui::AbstractTreeView> tree_view);
int BIFIconID
Definition ED_asset.hh:29
#define C
Definition RandGen.cpp:29
blender::FunctionRef< eUIListFilterResult( const PointerRNA &itemptr, blender::StringRefNull name, int index)> uiListItemFilterFn
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)
blender::FunctionRef< std::string(const PointerRNA &itemptr, int index)> uiListItemGetNameFn
ReportList * reports
Definition WM_types.hh:1025
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)
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])
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:174
PointerRNA * ptr
Definition wm_files.cc:4226