Blender V4.3
RNA_path.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
5#pragma once
6
18#include <optional>
19#include <string>
20
21#include "RNA_types.hh"
22
23struct ListBase;
24struct IDProperty;
25
58struct RNAPath {
59 std::string path;
65 std::optional<std::string> key = std::nullopt;
66 std::optional<int> index = std::nullopt;
67};
68
77bool operator==(const RNAPath &left, const RNAPath &right);
78
79char *RNA_path_append(
80 const char *path, const PointerRNA *ptr, PropertyRNA *prop, int intkey, const char *strkey);
81#if 0 /* UNUSED. */
82char *RNA_path_back(const char *path);
83#endif
84
95const char *RNA_path_array_index_token_find(const char *rna_path, const PropertyRNA *array_prop);
96
97/* RNA_path_resolve() variants only ensure that a valid pointer (and optionally property) exist. */
98
111 const char *path,
112 PointerRNA *r_ptr,
113 PropertyRNA **r_prop);
114
123 const char *path,
124 PointerRNA *r_ptr,
125 PropertyRNA **r_prop,
126 int *r_index);
134 const char *path,
135 PointerRNA *r_ptr,
136 PropertyRNA **r_prop,
137 int *r_index);
138
139/* RNA_path_resolve_property() variants ensure that pointer + property both exist. */
140
150 const char *path,
151 PointerRNA *r_ptr,
152 PropertyRNA **r_prop);
153
163 const char *path,
164 PointerRNA *r_ptr,
165 PropertyRNA **r_prop,
166 int *r_index);
167
168/* RNA_path_resolve_property_and_item_pointer() variants ensure that pointer + property both exist,
169 * and resolve last Pointer value if possible (Pointer prop or item of a Collection prop). */
170
184 const char *path,
185 PointerRNA *r_ptr,
186 PropertyRNA **r_prop,
187 PointerRNA *r_item_ptr);
188
203 const char *path,
204 PointerRNA *r_ptr,
205 PropertyRNA **r_prop,
206 int *r_index,
207 PointerRNA *r_item_ptr);
208
224bool RNA_path_resolve_elements(PointerRNA *ptr, const char *path, ListBase *r_elements);
225
236std::optional<std::string> RNA_path_from_struct_to_idproperty(PointerRNA *ptr,
237 const IDProperty *needle);
238
246ID *RNA_find_real_ID_and_path(ID *id, const char **r_path);
247
248std::optional<std::string> RNA_path_from_ID_to_struct(const PointerRNA *ptr);
249
250std::optional<std::string> RNA_path_from_real_ID_to_struct(Main *bmain,
251 const PointerRNA *ptr,
252 ID **r_real);
253
254std::optional<std::string> RNA_path_from_ID_to_property(const PointerRNA *ptr, PropertyRNA *prop);
255
257 PropertyRNA *prop,
258 int index_dim,
259 int index);
265std::optional<std::string> RNA_path_from_ID_to_property_index(const PointerRNA *ptr,
266 PropertyRNA *prop,
267 int index_dim,
268 int index);
269
270std::optional<std::string> RNA_path_from_real_ID_to_property_index(Main *bmain,
271 const PointerRNA *ptr,
272 PropertyRNA *prop,
273 int index_dim,
274 int index,
275 ID **r_real_id);
276
281std::optional<std::string> RNA_path_resolve_from_type_to_property(const PointerRNA *ptr,
282 PropertyRNA *prop,
283 const StructRNA *type);
284
289std::string RNA_path_full_ID_py(ID *id);
294std::optional<std::string> RNA_path_full_struct_py(const PointerRNA *ptr);
299std::optional<std::string> RNA_path_full_property_py_ex(const PointerRNA *ptr,
300 PropertyRNA *prop,
301 int index,
302 bool use_fallback);
303std::optional<std::string> RNA_path_full_property_py(const PointerRNA *ptr,
304 PropertyRNA *prop,
305 int index);
310std::optional<std::string> RNA_path_struct_property_py(PointerRNA *ptr,
311 PropertyRNA *prop,
312 int index);
317std::string RNA_path_property_py(const PointerRNA *ptr, PropertyRNA *prop, int index);
std::optional< std::string > RNA_path_from_struct_to_idproperty(PointerRNA *ptr, const IDProperty *needle)
Definition rna_path.cc:913
std::optional< std::string > RNA_path_from_ID_to_struct(const PointerRNA *ptr)
Definition rna_path.cc:1007
std::optional< std::string > RNA_path_full_property_py(const PointerRNA *ptr, PropertyRNA *prop, int index)
Definition rna_path.cc:1311
std::optional< std::string > RNA_path_from_real_ID_to_struct(Main *bmain, const PointerRNA *ptr, ID **r_real)
Definition rna_path.cc:1049
std::optional< std::string > RNA_path_from_real_ID_to_property_index(Main *bmain, const PointerRNA *ptr, PropertyRNA *prop, int index_dim, int index, ID **r_real_id)
Definition rna_path.cc:1171
std::optional< std::string > RNA_path_full_property_py_ex(const PointerRNA *ptr, PropertyRNA *prop, int index, bool use_fallback)
Definition rna_path.cc:1276
bool RNA_path_resolve_elements(PointerRNA *ptr, const char *path, ListBase *r_elements)
Definition rna_path.cc:601
std::optional< std::string > RNA_path_resolve_from_type_to_property(const PointerRNA *ptr, PropertyRNA *prop, const StructRNA *type)
Definition rna_path.cc:1189
bool RNA_path_resolve_full_maybe_null(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, int *r_index)
Definition rna_path.cc:547
ID * RNA_find_real_ID_and_path(ID *id, const char **r_path)
Definition rna_path.cc:947
std::optional< std::string > RNA_path_full_struct_py(const PointerRNA *ptr)
Definition rna_path.cc:1260
bool RNA_path_resolve_property_and_item_pointer(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, PointerRNA *r_item_ptr)
Definition rna_path.cc:575
bool operator==(const RNAPath &left, const RNAPath &right)
Definition rna_path.cc:37
std::string RNA_path_full_ID_py(ID *id)
Definition rna_path.cc:1225
const char * RNA_path_array_index_token_find(const char *rna_path, const PropertyRNA *array_prop)
Definition rna_path.cc:715
bool RNA_path_resolve_full(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, int *r_index)
Definition rna_path.cc:537
std::optional< std::string > RNA_path_from_ID_to_property_index(const PointerRNA *ptr, PropertyRNA *prop, int index_dim, int index)
Definition rna_path.cc:1149
std::string RNA_path_property_py(const PointerRNA *ptr, PropertyRNA *prop, int index)
Definition rna_path.cc:1345
std::optional< std::string > RNA_path_from_ID_to_property(const PointerRNA *ptr, PropertyRNA *prop)
Definition rna_path.cc:1166
bool RNA_path_resolve_property(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop)
Definition rna_path.cc:553
bool RNA_path_resolve_property_full(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, int *r_index)
Definition rna_path.cc:565
bool RNA_path_resolve_property_and_item_pointer_full(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, int *r_index, PointerRNA *r_item_ptr)
Definition rna_path.cc:588
std::optional< std::string > RNA_path_struct_property_py(PointerRNA *ptr, PropertyRNA *prop, int index)
Definition rna_path.cc:1318
std::string RNA_path_from_ptr_to_property_index(const PointerRNA *ptr, PropertyRNA *prop, int index_dim, int index)
Definition rna_path.cc:1141
bool RNA_path_resolve(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop)
Definition rna_path.cc:525
char * RNA_path_append(const char *path, const PointerRNA *ptr, PropertyRNA *prop, int intkey, const char *strkey)
Definition rna_path.cc:606
Definition DNA_ID.h:413
PropertyElemRNA * next
Definition RNA_path.hh:210
PointerRNA ptr
Definition RNA_path.hh:211
PropertyRNA * prop
Definition RNA_path.hh:212
PropertyElemRNA * prev
Definition RNA_path.hh:210
std::string path
Definition RNA_path.hh:59
std::optional< std::string > key
Definition RNA_path.hh:65
PointerRNA * ptr
Definition wm_files.cc:4126