Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenkernel/intern/screen.c')
-rw-r--r--source/blender/blenkernel/intern/screen.c54
1 files changed, 52 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c
index d5540a3cfd3..d0d63192ebf 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -227,7 +227,12 @@ void BKE_screen_foreach_id_screen_area(LibraryForeachIDData *data, ScrArea *area
case SPACE_SPREADSHEET: {
SpaceSpreadsheet *sspreadsheet = (SpaceSpreadsheet *)sl;
- BKE_LIB_FOREACHID_PROCESS_ID(data, sspreadsheet->pinned_id, IDWALK_CB_NOP);
+ LISTBASE_FOREACH (SpreadsheetContext *, context, &sspreadsheet->context_path) {
+ if (context->type == SPREADSHEET_CONTEXT_OBJECT) {
+ BKE_LIB_FOREACHID_PROCESS(
+ data, ((SpreadsheetContextObject *)context)->object, IDWALK_CB_NOP);
+ }
+ }
break;
}
default:
@@ -1357,6 +1362,27 @@ static void write_area(BlendWriter *writer, ScrArea *area)
BLO_write_struct(writer, SpreadsheetColumnID, column->id);
BLO_write_string(writer, column->id->name);
}
+ LISTBASE_FOREACH (SpreadsheetContext *, context, &sspreadsheet->context_path) {
+ switch (context->type) {
+ case SPREADSHEET_CONTEXT_OBJECT: {
+ SpreadsheetContextObject *object_context = (SpreadsheetContextObject *)context;
+ BLO_write_struct(writer, SpreadsheetContextObject, object_context);
+ break;
+ }
+ case SPREADSHEET_CONTEXT_MODIFIER: {
+ SpreadsheetContextModifier *modifier_context = (SpreadsheetContextModifier *)context;
+ BLO_write_struct(writer, SpreadsheetContextModifier, modifier_context);
+ BLO_write_string(writer, modifier_context->modifier_name);
+ break;
+ }
+ case SPREADSHEET_CONTEXT_NODE: {
+ SpreadsheetContextNode *node_context = (SpreadsheetContextNode *)context;
+ BLO_write_struct(writer, SpreadsheetContextNode, node_context);
+ BLO_write_string(writer, node_context->node_name);
+ break;
+ }
+ }
+ }
}
}
}
@@ -1715,6 +1741,25 @@ static void direct_link_area(BlendDataReader *reader, ScrArea *area)
BLO_read_data_address(reader, &column->id);
BLO_read_data_address(reader, &column->id->name);
}
+
+ BLO_read_list(reader, &sspreadsheet->context_path);
+ LISTBASE_FOREACH (SpreadsheetContext *, context, &sspreadsheet->context_path) {
+ switch (context->type) {
+ case SPREADSHEET_CONTEXT_NODE: {
+ SpreadsheetContextNode *node_context = (SpreadsheetContextNode *)context;
+ BLO_read_data_address(reader, &node_context->node_name);
+ break;
+ }
+ case SPREADSHEET_CONTEXT_MODIFIER: {
+ SpreadsheetContextModifier *modifier_context = (SpreadsheetContextModifier *)context;
+ BLO_read_data_address(reader, &modifier_context->modifier_name);
+ break;
+ }
+ case SPREADSHEET_CONTEXT_OBJECT: {
+ break;
+ }
+ }
+ }
}
}
@@ -1931,7 +1976,12 @@ void BKE_screen_area_blend_read_lib(BlendLibReader *reader, ID *parent_id, ScrAr
}
case SPACE_SPREADSHEET: {
SpaceSpreadsheet *sspreadsheet = (SpaceSpreadsheet *)sl;
- BLO_read_id_address(reader, parent_id->lib, &sspreadsheet->pinned_id);
+ LISTBASE_FOREACH (SpreadsheetContext *, context, &sspreadsheet->context_path) {
+ if (context->type == SPREADSHEET_CONTEXT_OBJECT) {
+ BLO_read_id_address(
+ reader, parent_id->lib, &((SpreadsheetContextObject *)context)->object);
+ }
+ }
break;
}
default: