Blender V5.0
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
17
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 int64_t hash() const;
69};
70
79bool operator==(const RNAPath &left, const RNAPath &right);
80
81char *RNA_path_append(
82 const char *path, const PointerRNA *ptr, PropertyRNA *prop, int intkey, const char *strkey);
83#if 0 /* UNUSED. */
84char *RNA_path_back(const char *path);
85#endif
86
97const char *RNA_path_array_index_token_find(const char *rna_path, const PropertyRNA *array_prop);
98
99/* RNA_path_resolve() variants only ensure that a valid pointer (and optionally property) exist. */
100
113 const char *path,
114 PointerRNA *r_ptr,
115 PropertyRNA **r_prop);
116
125 const char *path,
126 PointerRNA *r_ptr,
127 PropertyRNA **r_prop,
128 int *r_index);
136 const char *path,
137 PointerRNA *r_ptr,
138 PropertyRNA **r_prop,
139 int *r_index);
140
141/* RNA_path_resolve_property() variants ensure that pointer + property both exist. */
142
152 const char *path,
153 PointerRNA *r_ptr,
154 PropertyRNA **r_prop);
155
165 const char *path,
166 PointerRNA *r_ptr,
167 PropertyRNA **r_prop,
168 int *r_index);
169
170/* RNA_path_resolve_property_and_item_pointer() variants ensure that pointer + property both exist,
171 * and resolve last Pointer value if possible (Pointer prop or item of a Collection prop). */
172
186 const char *path,
187 PointerRNA *r_ptr,
188 PropertyRNA **r_prop,
189 PointerRNA *r_item_ptr);
190
205 const char *path,
206 PointerRNA *r_ptr,
207 PropertyRNA **r_prop,
208 int *r_index,
209 PointerRNA *r_item_ptr);
210
217
226bool RNA_path_resolve_elements(PointerRNA *ptr, const char *path, ListBase *r_elements);
227
238std::optional<std::string> RNA_path_from_struct_to_idproperty(PointerRNA *ptr,
239 const IDProperty *needle);
240
248ID *RNA_find_real_ID_and_path(ID *id, const char **r_path);
249
250std::optional<std::string> RNA_path_from_ID_to_struct(const PointerRNA *ptr);
251
252std::optional<std::string> RNA_path_from_real_ID_to_struct(Main *bmain,
253 const PointerRNA *ptr,
254 ID **r_real);
255
256std::optional<std::string> RNA_path_from_ID_to_property(const PointerRNA *ptr, PropertyRNA *prop);
257
259 PropertyRNA *prop,
260 int index_dim,
261 int index);
267std::optional<std::string> RNA_path_from_ID_to_property_index(const PointerRNA *ptr,
268 PropertyRNA *prop,
269 int index_dim,
270 int index);
271
272std::optional<std::string> RNA_path_from_real_ID_to_property_index(Main *bmain,
273 const PointerRNA *ptr,
274 PropertyRNA *prop,
275 int index_dim,
276 int index,
277 ID **r_real_id);
278
283std::optional<std::string> RNA_path_resolve_from_type_to_property(const PointerRNA *ptr,
284 PropertyRNA *prop,
285 const StructRNA *type);
286
291std::string RNA_path_full_ID_py(ID *id);
296std::optional<std::string> RNA_path_full_struct_py(const PointerRNA *ptr);
301std::optional<std::string> RNA_path_full_property_py_ex(const PointerRNA *ptr,
302 PropertyRNA *prop,
303 int index,
304 bool use_fallback);
305std::optional<std::string> RNA_path_full_property_py(const PointerRNA *ptr,
306 PropertyRNA *prop,
307 int index);
312std::optional<std::string> RNA_path_struct_property_py(PointerRNA *ptr,
313 PropertyRNA *prop,
314 int index);
319std::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:920
std::optional< std::string > RNA_path_from_ID_to_struct(const PointerRNA *ptr)
Definition rna_path.cc:1014
std::optional< std::string > RNA_path_full_property_py(const PointerRNA *ptr, PropertyRNA *prop, int index)
Definition rna_path.cc:1318
std::optional< std::string > RNA_path_from_real_ID_to_struct(Main *bmain, const PointerRNA *ptr, ID **r_real)
Definition rna_path.cc:1056
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:1178
std::optional< std::string > RNA_path_full_property_py_ex(const PointerRNA *ptr, PropertyRNA *prop, int index, bool use_fallback)
Definition rna_path.cc:1283
bool RNA_path_resolve_elements(PointerRNA *ptr, const char *path, ListBase *r_elements)
Definition rna_path.cc:608
std::optional< std::string > RNA_path_resolve_from_type_to_property(const PointerRNA *ptr, PropertyRNA *prop, const StructRNA *type)
Definition rna_path.cc:1196
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:554
ID * RNA_find_real_ID_and_path(ID *id, const char **r_path)
Definition rna_path.cc:954
std::optional< std::string > RNA_path_full_struct_py(const PointerRNA *ptr)
Definition rna_path.cc:1267
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:582
bool operator==(const RNAPath &left, const RNAPath &right)
Definition rna_path.cc:46
std::string RNA_path_full_ID_py(ID *id)
Definition rna_path.cc:1232
const char * RNA_path_array_index_token_find(const char *rna_path, const PropertyRNA *array_prop)
Definition rna_path.cc:722
bool RNA_path_resolve_full(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, int *r_index)
Definition rna_path.cc:544
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:1156
std::string RNA_path_property_py(const PointerRNA *ptr, PropertyRNA *prop, int index)
Definition rna_path.cc:1352
std::optional< std::string > RNA_path_from_ID_to_property(const PointerRNA *ptr, PropertyRNA *prop)
Definition rna_path.cc:1173
bool RNA_path_resolve_property(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop)
Definition rna_path.cc:560
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:572
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:595
std::optional< std::string > RNA_path_struct_property_py(PointerRNA *ptr, PropertyRNA *prop, int index)
Definition rna_path.cc:1325
std::string RNA_path_from_ptr_to_property_index(const PointerRNA *ptr, PropertyRNA *prop, int index_dim, int index)
Definition rna_path.cc:1148
bool RNA_path_resolve(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop)
Definition rna_path.cc:532
char * RNA_path_append(const char *path, const PointerRNA *ptr, PropertyRNA *prop, int intkey, const char *strkey)
Definition rna_path.cc:613
long long int int64_t
static int left
Definition DNA_ID.h:414
PropertyElemRNA * next
Definition RNA_path.hh:212
PointerRNA ptr
Definition RNA_path.hh:213
PropertyRNA * prop
Definition RNA_path.hh:214
PropertyElemRNA * prev
Definition RNA_path.hh:212
std::optional< int > index
Definition RNA_path.hh:66
int64_t hash() const
Definition rna_path.cc:38
std::string path
Definition RNA_path.hh:59
std::optional< std::string > key
Definition RNA_path.hh:65
PointerRNA * ptr
Definition wm_files.cc:4238