51 return &new_table_id->base;
64 for (
const int i :
IndexRange(table_id_->bundle_path_num)) {
114 for (
const int i :
IndexRange(table_id_->bundle_path_num)) {
147 if (a.
type !=
b.type) {
158 a_.attribute_domain == b_.attribute_domain &&
159 a_.object_eval_state == b_.object_eval_state && a_.layer_index == b_.layer_index &&
172 spreadsheet_table->
id = table_id;
173 return spreadsheet_table;
253 sspreadsheet.
tables = new_tables;
259 uint32_t min_last_used = 0;
260 const int max_tables = 50;
264 last_used_times.
append(table->last_used);
266 std::sort(last_used_times.
begin(), last_used_times.
end());
267 min_last_used = last_used_times[sspreadsheet.
num_tables - max_tables];
274 if (!(table->flag & SPREADSHEET_TABLE_FLAG_MANUALLY_EDITED)) {
286 case SPREADSHEET_TABLE_ID_TYPE_GEOMETRY: {
287 const SpreadsheetTableIDGeometry &table_id =
288 *reinterpret_cast<const SpreadsheetTableIDGeometry *>(table->id);
289 LISTBASE_FOREACH (ViewerPathElem *, elem, &table_id.viewer_path.path) {
290 if (elem->type == VIEWER_PATH_ELEM_TYPE_ID) {
291 const IDViewerPathElem &id_elem = reinterpret_cast<const IDViewerPathElem &>(
310 const int max_unavailable_columns_target = 50;
311 int num_unavailable_columns = 0;
313 if (!column->is_available()) {
314 num_unavailable_columns++;
317 if (num_unavailable_columns <= max_unavailable_columns_target) {
325 if (!column->is_available()) {
326 last_used_times.
append(column->last_used);
329 std::sort(last_used_times.
begin(), last_used_times.
end());
330 const int min_last_used = last_used_times[max_unavailable_columns_target];
336 if (column->is_available()) {
void BKE_viewer_path_copy(ViewerPath *dst, const ViewerPath *src)
void BKE_viewer_path_id_remap(ViewerPath *viewer_path, const blender::bke::id::IDRemapper &mappings)
@ VIEWER_PATH_EQUAL_FLAG_IGNORE_ITERATION
void BKE_viewer_path_foreach_id(LibraryForeachIDData *data, ViewerPath *viewer_path)
void BKE_viewer_path_clear(ViewerPath *viewer_path)
void BKE_viewer_path_blend_read_data(BlendDataReader *reader, ViewerPath *viewer_path)
bool BKE_viewer_path_equal(const ViewerPath *a, const ViewerPath *b, ViewerPathEqualFlag flag=ViewerPathEqualFlag(0))
void BKE_viewer_path_blend_write(BlendWriter *writer, const ViewerPath *viewer_path)
char * BLI_strdup_null(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_MALLOC
#define BLO_write_struct(writer, struct_name, data_ptr)
void BLO_read_string(BlendDataReader *reader, char **ptr_p)
void BLO_write_string(BlendWriter *writer, const char *data_ptr)
#define BLO_write_struct_array(writer, struct_name, array_size, data_ptr)
#define BLO_read_struct_array(reader, struct_name, array_size, ptr_p)
#define BLO_read_struct(reader, struct_name, ptr_p)
void BLO_write_pointer_array(BlendWriter *writer, int64_t num, const void *data_ptr)
void BLO_read_pointer_array(BlendDataReader *reader, int64_t array_size, void **ptr_p)
@ SPREADSHEET_TABLE_ID_TYPE_GEOMETRY
switch((BMIterType) itype)
BMesh const char void * data
constexpr int64_t first_index(const T &search_value) const
void append(const T &value)
void * MEM_calloc_arrayN(size_t len, size_t size, const char *str)
void * MEM_callocN(size_t len, const char *str)
void * MEM_dupallocN(const void *vmemh)
void MEM_freeN(void *vmemh)
void remove_if(T **items, int *items_num, FunctionRef< bool(const T &)> predicate, void(*destruct_item)(T *))
void move_index(T *items, const int items_num, const int from_index, const int to_index)
void spreadsheet_table_move_to_front(SpaceSpreadsheet &sspreadsheet, SpreadsheetTable &table)
void spreadsheet_table_id_free(SpreadsheetTableID *table_id)
void spreadsheet_table_blend_write(BlendWriter *writer, const SpreadsheetTable *table)
void spreadsheet_table_id_blend_write(BlendWriter *writer, const SpreadsheetTableID *table_id)
void spreadsheet_column_blend_write(BlendWriter *writer, const SpreadsheetColumn *column)
void spreadsheet_table_blend_read(BlendDataReader *reader, SpreadsheetTable *table)
void spreadsheet_table_remove_unused(SpaceSpreadsheet &sspreadsheet)
void spreadsheet_column_blend_read(BlendDataReader *reader, SpreadsheetColumn *column)
void spreadsheet_table_id_free_content(SpreadsheetTableID *table_id)
SpreadsheetTableID * spreadsheet_table_id_copy(const SpreadsheetTableID &src_table_id)
void spreadsheet_table_id_copy_content_geometry(SpreadsheetTableIDGeometry &dst, const SpreadsheetTableIDGeometry &src)
void spreadsheet_table_id_blend_write_content_geometry(BlendWriter *writer, const SpreadsheetTableIDGeometry *table_id)
void spreadsheet_table_id_blend_read(BlendDataReader *reader, SpreadsheetTableID *table_id)
void spreadsheet_table_remove_unused_columns(SpreadsheetTable &table)
SpreadsheetTableIDGeometry * spreadsheet_table_id_new_geometry()
void spreadsheet_table_id_foreach_id(SpreadsheetTableID &table_id, LibraryForeachIDData *data)
SpreadsheetTable * spreadsheet_table_new(SpreadsheetTableID *table_id)
void spreadsheet_column_free(SpreadsheetColumn *column)
void spreadsheet_table_free(SpreadsheetTable *table)
void spreadsheet_table_foreach_id(SpreadsheetTable &table, LibraryForeachIDData *data)
bool spreadsheet_table_id_match(const SpreadsheetTableID &a, const SpreadsheetTableID &b)
SpreadsheetTable * spreadsheet_table_copy(const SpreadsheetTable &src_table)
void spreadsheet_table_remap_id(SpreadsheetTable &table, const bke::id::IDRemapper &mappings)
SpreadsheetColumn * spreadsheet_column_copy(const SpreadsheetColumn *src_column)
void spreadsheet_table_id_remap_id(SpreadsheetTableID &table_id, const bke::id::IDRemapper &mappings)
SpreadsheetTable * spreadsheet_table_find(SpaceSpreadsheet &sspreadsheet, const SpreadsheetTableID &table_id)
void spreadsheet_table_add(SpaceSpreadsheet &sspreadsheet, SpreadsheetTable *table)
SpreadsheetTable ** tables
SpreadsheetBundlePathElem * bundle_path
uint8_t object_eval_state
SpreadsheetInstanceID * instance_ids
uint8_t geometry_component_type
SpreadsheetColumn ** columns