Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/screen.c
| Show First 20 Lines • Show All 221 Lines • ▼ Show 20 Lines | switch (sl->spacetype) { | ||||
| BKE_LIB_FOREACHID_PROCESS(data, sclip->clip, IDWALK_CB_USER_ONE); | BKE_LIB_FOREACHID_PROCESS(data, sclip->clip, IDWALK_CB_USER_ONE); | ||||
| BKE_LIB_FOREACHID_PROCESS(data, sclip->mask_info.mask, IDWALK_CB_USER_ONE); | BKE_LIB_FOREACHID_PROCESS(data, sclip->mask_info.mask, IDWALK_CB_USER_ONE); | ||||
| break; | break; | ||||
| } | } | ||||
| case SPACE_SPREADSHEET: { | case SPACE_SPREADSHEET: { | ||||
| SpaceSpreadsheet *sspreadsheet = (SpaceSpreadsheet *)sl; | 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; | break; | ||||
| } | } | ||||
| default: | default: | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 1,113 Lines • ▼ Show 20 Lines | else if (sl->spacetype == SPACE_SPREADSHEET) { | ||||
| BLO_write_struct(writer, SpaceSpreadsheet, sl); | BLO_write_struct(writer, SpaceSpreadsheet, sl); | ||||
| SpaceSpreadsheet *sspreadsheet = (SpaceSpreadsheet *)sl; | SpaceSpreadsheet *sspreadsheet = (SpaceSpreadsheet *)sl; | ||||
| LISTBASE_FOREACH (SpreadsheetColumn *, column, &sspreadsheet->columns) { | LISTBASE_FOREACH (SpreadsheetColumn *, column, &sspreadsheet->columns) { | ||||
| BLO_write_struct(writer, SpreadsheetColumn, column); | BLO_write_struct(writer, SpreadsheetColumn, column); | ||||
| BLO_write_struct(writer, SpreadsheetColumnID, column->id); | BLO_write_struct(writer, SpreadsheetColumnID, column->id); | ||||
| BLO_write_string(writer, column->id->name); | BLO_write_string(writer, column->id->name); | ||||
| } | } | ||||
| LISTBASE_FOREACH (SpreadsheetContext *, context, &sspreadsheet->context_path) { | |||||
HooglyBoogly: I would think you would only want to write the breadcrumbs if there is a pinned context, right? | |||||
Done Inline ActionsIt's not just runtime data. The breadcrumbs are the ground truth for what is currently displayed in the spreadsheet. If there are multiple possible contexts for the spreadsheet, the breadcrumbs will remember which one is actually displayed at any moment. (note getting multiple contexts at the same time is not super easy right now, because pinned node groups don't fully work yet as I just noticed; but that's something that can be fixed a little later) JacquesLucke: It's not just runtime data. The breadcrumbs are the ground truth for what is currently… | |||||
Not Done Inline ActionsRight, thanks. HooglyBoogly: Right, thanks. | |||||
| 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; | |||||
| } | |||||
| } | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| void BKE_screen_area_map_blend_write(BlendWriter *writer, ScrAreaMap *area_map) | void BKE_screen_area_map_blend_write(BlendWriter *writer, ScrAreaMap *area_map) | ||||
| { | { | ||||
| BLO_write_struct_list(writer, ScrVert, &area_map->vertbase); | BLO_write_struct_list(writer, ScrVert, &area_map->vertbase); | ||||
| BLO_write_struct_list(writer, ScrEdge, &area_map->edgebase); | BLO_write_struct_list(writer, ScrEdge, &area_map->edgebase); | ||||
| ▲ Show 20 Lines • Show All 342 Lines • ▼ Show 20 Lines | else if (sl->spacetype == SPACE_SPREADSHEET) { | ||||
| sspreadsheet->runtime = NULL; | sspreadsheet->runtime = NULL; | ||||
| BLO_read_list(reader, &sspreadsheet->columns); | BLO_read_list(reader, &sspreadsheet->columns); | ||||
| LISTBASE_FOREACH (SpreadsheetColumn *, column, &sspreadsheet->columns) { | LISTBASE_FOREACH (SpreadsheetColumn *, column, &sspreadsheet->columns) { | ||||
| BLO_read_data_address(reader, &column->id); | BLO_read_data_address(reader, &column->id); | ||||
| BLO_read_data_address(reader, &column->id->name); | 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; | |||||
| } | |||||
| } | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| BLI_listbase_clear(&area->actionzones); | BLI_listbase_clear(&area->actionzones); | ||||
| BLO_read_data_address(reader, &area->v1); | BLO_read_data_address(reader, &area->v1); | ||||
| BLO_read_data_address(reader, &area->v2); | BLO_read_data_address(reader, &area->v2); | ||||
| BLO_read_data_address(reader, &area->v3); | BLO_read_data_address(reader, &area->v3); | ||||
| ▲ Show 20 Lines • Show All 200 Lines • ▼ Show 20 Lines | switch (sl->spacetype) { | ||||
| case SPACE_CLIP: { | case SPACE_CLIP: { | ||||
| SpaceClip *sclip = (SpaceClip *)sl; | SpaceClip *sclip = (SpaceClip *)sl; | ||||
| BLO_read_id_address(reader, parent_id->lib, &sclip->clip); | BLO_read_id_address(reader, parent_id->lib, &sclip->clip); | ||||
| BLO_read_id_address(reader, parent_id->lib, &sclip->mask_info.mask); | BLO_read_id_address(reader, parent_id->lib, &sclip->mask_info.mask); | ||||
| break; | break; | ||||
| } | } | ||||
| case SPACE_SPREADSHEET: { | case SPACE_SPREADSHEET: { | ||||
| SpaceSpreadsheet *sspreadsheet = (SpaceSpreadsheet *)sl; | 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; | break; | ||||
| } | } | ||||
| default: | default: | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
I would think you would only want to write the breadcrumbs if there is a pinned context, right? Otherwise it's just runtime data.