Blender V5.0
spreadsheet_column.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
6#include "DNA_space_types.h"
7
8#include "BLO_read_write.hh"
9
10#include "MEM_guardedalloc.h"
11
12#include "BLI_color.hh"
13#include "BLI_cpp_type.hh"
16#include "BLI_string.h"
17#include "BLI_string_ref.hh"
18
19#include "BKE_geometry_set.hh"
20#include "BKE_instances.hh"
21
23
24#include "spreadsheet_column.hh"
26
28
30{
31 if (type.is<bool>()) {
33 }
34 if (type.is<int8_t>()) {
36 }
37 if (type.is<int>()) {
39 }
40 if (type.is<int64_t>()) {
42 }
43 if (type.is_any<short2, int2>()) {
45 }
46 if (type.is_any<int3>()) {
48 }
49 if (type.is<float>()) {
51 }
52 if (type.is<float2>()) {
54 }
55 if (type.is<float3>()) {
57 }
58 if (type.is<ColorGeometry4f>()) {
60 }
61 if (type.is<std::string>() || type.is<MStringProperty>()) {
63 }
64 if (type.is<bke::InstanceReference>()) {
66 }
67 if (type.is<ColorGeometry4b>()) {
69 }
70 if (type.is<math::Quaternion>()) {
72 }
73 if (type.is<float4x4>()) {
75 }
76 if (type.is<nodes::BundleItemValue>()) {
78 }
79
81}
82
88
90{
92 new_column_id->name = BLI_strdup(src_column_id->name);
93 return new_column_id;
94}
95
97{
98 if (column_id->name != nullptr) {
99 MEM_freeN(column_id->name);
100 }
101 MEM_freeN(column_id);
102}
103
105{
106 BLO_write_struct(writer, SpreadsheetColumnID, column_id);
107 BLO_write_string(writer, column_id->name);
108}
109
111{
112 BLO_read_string(reader, &column_id->name);
113}
114
116{
118 column->id = column_id;
119 column->runtime = MEM_new<SpreadsheetColumnRuntime>(__func__);
120 return column;
121}
122
124 const eSpreadsheetColumnValueType data_type,
125 const StringRefNull display_name)
126{
127 column->data_type = data_type;
129 column->display_name = BLI_strdup(display_name.c_str());
130}
131
133{
134 SpreadsheetColumnID *new_column_id = spreadsheet_column_id_copy(src_column->id);
135 SpreadsheetColumn *new_column = spreadsheet_column_new(new_column_id);
136 if (src_column->display_name != nullptr) {
137 new_column->display_name = BLI_strdup(src_column->display_name);
138 }
139 new_column->width = src_column->width;
140 return new_column;
141}
142
144{
147 MEM_delete(column->runtime);
148 MEM_freeN(column);
149}
150
152{
153 BLO_write_struct(writer, SpreadsheetColumn, column);
154 spreadsheet_column_id_blend_write(writer, column->id);
155 BLO_write_string(writer, column->display_name);
156}
157
159{
160 column->runtime = MEM_new<SpreadsheetColumnRuntime>(__func__);
161 BLO_read_struct(reader, SpreadsheetColumnID, &column->id);
162 spreadsheet_column_id_blend_read(reader, column->id);
163 BLO_read_string(reader, &column->display_name);
164}
165
166} // namespace blender::ed::spreadsheet
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC
Definition string.cc:41
#define BLO_write_struct(writer, struct_name, data_ptr)
void BLO_read_string(BlendDataReader *reader, char **ptr_p)
Definition readfile.cc:5828
void BLO_write_string(BlendWriter *writer, const char *data_ptr)
#define BLO_read_struct(reader, struct_name, ptr_p)
eSpreadsheetColumnValueType
@ SPREADSHEET_VALUE_TYPE_INT8
@ SPREADSHEET_VALUE_TYPE_FLOAT
@ SPREADSHEET_VALUE_TYPE_INT32_2D
@ SPREADSHEET_VALUE_TYPE_BYTE_COLOR
@ SPREADSHEET_VALUE_TYPE_UNKNOWN
@ SPREADSHEET_VALUE_TYPE_FLOAT3
@ SPREADSHEET_VALUE_TYPE_BOOL
@ SPREADSHEET_VALUE_TYPE_STRING
@ SPREADSHEET_VALUE_TYPE_INT32_3D
@ SPREADSHEET_VALUE_TYPE_QUATERNION
@ SPREADSHEET_VALUE_TYPE_FLOAT4X4
@ SPREADSHEET_VALUE_TYPE_INT32
@ SPREADSHEET_VALUE_TYPE_BUNDLE_ITEM
@ SPREADSHEET_VALUE_TYPE_INT64
@ SPREADSHEET_VALUE_TYPE_FLOAT2
@ SPREADSHEET_VALUE_TYPE_COLOR
@ SPREADSHEET_VALUE_TYPE_INSTANCES
Read Guarded memory(de)allocation.
#define MEM_SAFE_FREE(v)
long long int int64_t
bool is_any() const
bool is() const
constexpr const char * c_str() const
void * MEM_callocN(size_t len, const char *str)
Definition mallocn.cc:118
void MEM_freeN(void *vmemh)
Definition mallocn.cc:113
SpreadsheetColumn * spreadsheet_column_new(SpreadsheetColumnID *column_id)
SpreadsheetColumnID * spreadsheet_column_id_new()
void spreadsheet_column_blend_write(BlendWriter *writer, const SpreadsheetColumn *column)
void spreadsheet_column_blend_read(BlendDataReader *reader, SpreadsheetColumn *column)
void spreadsheet_column_free(SpreadsheetColumn *column)
eSpreadsheetColumnValueType cpp_type_to_column_type(const CPPType &type)
void spreadsheet_column_id_free(SpreadsheetColumnID *column_id)
void spreadsheet_column_id_blend_write(BlendWriter *writer, const SpreadsheetColumnID *column_id)
void spreadsheet_column_assign_runtime_data(SpreadsheetColumn *column, const eSpreadsheetColumnValueType data_type, const StringRefNull display_name)
SpreadsheetColumnID * spreadsheet_column_id_copy(const SpreadsheetColumnID *src_column_id)
SpreadsheetColumn * spreadsheet_column_copy(const SpreadsheetColumn *src_column)
void spreadsheet_column_id_blend_read(BlendDataReader *reader, SpreadsheetColumnID *column_id)
QuaternionBase< float > Quaternion
MatBase< float, 4, 4 > float4x4
VecBase< int32_t, 2 > int2
VecBase< float, 2 > float2
VecBase< int32_t, 3 > int3
ColorSceneLinear4f< eAlpha::Premultiplied > ColorGeometry4f
VecBase< float, 3 > float3
blender::VecBase< int16_t, 2 > short2
ColorSceneLinearByteEncoded4b< eAlpha::Premultiplied > ColorGeometry4b
SpreadsheetColumnID * id
SpreadsheetColumnRuntime * runtime