diff options
author | Jacques Lucke <jacques@blender.org> | 2021-04-09 11:20:46 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2021-04-09 11:20:46 +0300 |
commit | 75491fe1002122f19fc9fe8eae941a406b81706a (patch) | |
tree | 16a05f5b5ccc7087595ce27656aaa60a5f5c118a /source/blender/makesdna | |
parent | 22574f741c4e4d142c7068316296d24bbfc2a12c (diff) |
Spreadsheet: persistent column storage and data source
A `DataSource` provides columns for the spreadsheet to display.
Every column has a SpreadsheetColumnID as identifier. Columns
are not generated eagerly anymore, instead the main spreadsheet
code can request a column from a data source with an column
identifier. The column identifiers can be stored in DNA and allow us
to store persistent data per column.
On the user level the only thing that changes is that columns are
not shown in alphabetical order anymore. Instead, new columns
are always added on the left. The behavior can be changed,
however I'd prefer not to automate this too much currently. I think
we should just add operators to hide/reorder/resize columns soonish.
Differential Revision: https://developer.blender.org/D10901
Diffstat (limited to 'source/blender/makesdna')
-rw-r--r-- | source/blender/makesdna/DNA_space_types.h | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 0ad66c63169..a90047b9daa 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -1854,6 +1854,22 @@ typedef struct SpaceStatusBar { /** \name Spreadsheet * \{ */ +typedef struct SpreadsheetColumnID { + char *name; + int index; + char _pad[4]; +} SpreadsheetColumnID; + +typedef struct SpreadsheetColumn { + struct SpreadsheetColumn *next, *prev; + /** + * Identifies the data in the column. + * This is a pointer instead of a struct to make it easier if we want to "subclass" + * #SpreadsheetColumnID in the future for different kinds of ids. + */ + SpreadsheetColumnID *id; +} SpreadsheetColumn; + typedef struct SpaceSpreadsheet { SpaceLink *next, *prev; /** Storage of regions for inactive spaces. */ @@ -1863,6 +1879,9 @@ typedef struct SpaceSpreadsheet { char _pad0[6]; /* End 'SpaceLink' header. */ + /* List of #SpreadsheetColumn. */ + ListBase columns; + struct ID *pinned_id; /* eSpaceSpreadsheet_FilterFlag. */ @@ -1880,8 +1899,6 @@ typedef struct SpaceSpreadsheet { SpaceSpreadsheet_Runtime *runtime; } SpaceSpreadsheet; -/** \} */ - typedef enum eSpaceSpreadsheet_FilterFlag { SPREADSHEET_FILTER_SELECTED_ONLY = (1 << 0), } eSpaceSpreadsheet_FilterFlag; @@ -1892,6 +1909,8 @@ typedef enum eSpaceSpreadsheet_ObjectEvalState { SPREADSHEET_OBJECT_EVAL_STATE_NODE = 2, } eSpaceSpreadsheet_Context; +/** \} */ + /* -------------------------------------------------------------------- */ /** \name Space Defines (eSpace_Type) * \{ */ |