Blender V4.5
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
22#include "spreadsheet_column.hh"
24
26
28{
29 if (type.is<bool>()) {
31 }
32 if (type.is<int8_t>()) {
34 }
35 if (type.is<int>()) {
37 }
38 if (type.is_any<short2, int2>()) {
40 }
41 if (type.is<float>()) {
43 }
44 if (type.is<float2>()) {
46 }
47 if (type.is<float3>()) {
49 }
50 if (type.is<ColorGeometry4f>()) {
52 }
53 if (type.is<std::string>() || type.is<MStringProperty>()) {
55 }
56 if (type.is<bke::InstanceReference>()) {
58 }
59 if (type.is<ColorGeometry4b>()) {
61 }
62 if (type.is<math::Quaternion>()) {
64 }
65 if (type.is<float4x4>()) {
67 }
68
70}
71
77
79{
81 new_column_id->name = BLI_strdup(src_column_id->name);
82 return new_column_id;
83}
84
86{
87 if (column_id->name != nullptr) {
88 MEM_freeN(column_id->name);
89 }
90 MEM_freeN(column_id);
91}
92
94{
95 BLO_write_struct(writer, SpreadsheetColumnID, column_id);
96 BLO_write_string(writer, column_id->name);
97}
98
100{
101 BLO_read_string(reader, &column_id->name);
102}
103
105{
107 column->id = column_id;
108 column->runtime = MEM_new<SpreadsheetColumnRuntime>(__func__);
109 return column;
110}
111
113 const eSpreadsheetColumnValueType data_type,
114 const StringRefNull display_name)
115{
116 column->data_type = data_type;
118 column->display_name = BLI_strdup(display_name.c_str());
119}
120
122{
123 SpreadsheetColumnID *new_column_id = spreadsheet_column_id_copy(src_column->id);
124 SpreadsheetColumn *new_column = spreadsheet_column_new(new_column_id);
125 if (src_column->display_name != nullptr) {
126 new_column->display_name = BLI_strdup(src_column->display_name);
127 }
128 new_column->width = src_column->width;
129 return new_column;
130}
131
133{
136 MEM_delete(column->runtime);
137 MEM_freeN(column);
138}
139
141{
142 BLO_write_struct(writer, SpreadsheetColumn, column);
143 spreadsheet_column_id_blend_write(writer, column->id);
144 BLO_write_string(writer, column->display_name);
145}
146
148{
149 column->runtime = MEM_new<SpreadsheetColumnRuntime>(__func__);
150 BLO_read_struct(reader, SpreadsheetColumnID, &column->id);
151 spreadsheet_column_id_blend_read(reader, column->id);
152 BLO_read_string(reader, &column->display_name);
153}
154
155} // 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:5351
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_QUATERNION
@ SPREADSHEET_VALUE_TYPE_FLOAT4X4
@ SPREADSHEET_VALUE_TYPE_INT32
@ SPREADSHEET_VALUE_TYPE_FLOAT2
@ SPREADSHEET_VALUE_TYPE_COLOR
@ SPREADSHEET_VALUE_TYPE_INSTANCES
Read Guarded memory(de)allocation.
bool is_any() const
bool is() const
constexpr const char * c_str() const
#define MEM_SAFE_FREE(v)
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
ColorSceneLinear4f< eAlpha::Premultiplied > ColorGeometry4f
Definition BLI_color.hh:342
VecBase< float, 3 > float3
blender::VecBase< int16_t, 2 > short2
ColorSceneLinearByteEncoded4b< eAlpha::Premultiplied > ColorGeometry4b
Definition BLI_color.hh:343
SpreadsheetColumnID * id
SpreadsheetColumnRuntime * runtime