107 MEM_delete(sspreadsheet->
runtime);
122 if (sspreadsheet->
runtime ==
nullptr) {
123 sspreadsheet->
runtime = MEM_new<SpaceSpreadsheet_Runtime>(__func__);
131 if (sspreadsheet_old->
runtime) {
132 sspreadsheet_new->
runtime = MEM_new<SpaceSpreadsheet_Runtime>(__func__,
136 sspreadsheet_new->
runtime = MEM_new<SpaceSpreadsheet_Runtime>(__func__);
227 id_elem->
id = &ob->
id;
244 if (context_object ==
nullptr) {
254 if (active_object != context_object) {
268 const std::optional<ViewerPathForGeometryNodesViewer> parsed_path =
271 if (parsed_path.has_value()) {
285 const std::optional<ViewerPathForGeometryNodesViewer> workspace_parsed_path =
287 if (workspace_parsed_path.has_value()) {
314 if (used_id ==
nullptr) {
318 if (id_type !=
ID_OB) {
335 if (object_eval ==
nullptr) {
368 if (!active_table_id) {
378 return std::to_string(std::max(0, tot_rows - 1)).size() *
BLF_width(fontid,
"0", 1) +
387 if (handled_columns.
add(*column->id)) {
390 new_columns.
append(column);
396 if (handled_columns.
contains(column_id)) {
406 new_columns.
insert(0, column);
409 new_columns.
append(column);
411 handled_columns.
add(*column->
id);
422 if (clock_was_reset || column->is_available()) {
444 data_source = std::make_unique<DataSource>();
476 const int tot_rows = data_source->tot_rows();
482 std::unique_ptr<ColumnValues> values_ptr = data_source->get_column_values(*column->id);
489 if (column->width <= 0.0f || column_type != column->data_type) {
493 spreadsheet_layout.
columns.append({values, width_in_pixels});
495 column->runtime->left_x =
x;
496 x += width_in_pixels;
497 column->runtime->right_x =
x;
503 *sspreadsheet, spreadsheet_layout, *data_source, scope);
636 std::stringstream ss;
637 ss <<
IFACE_(
"Rows:") <<
" ";
641 ss << visible_rows_str <<
" / ";
645 ss << tot_rows_str <<
" | " <<
IFACE_(
"Columns:") <<
" " << runtime->
tot_columns;
646 std::string stats_str = ss.str();
663 layout->
label(stats_str, ICON_NONE);
720 sspreadsheet->
runtime =
nullptr;
727 reader, sspreadsheet->
num_tables,
reinterpret_cast<void **
>(&sspreadsheet->
tables));
773 std::unique_ptr<SpaceType> st = std::make_unique<SpaceType>();
777 STRNCPY(st->name,
"Spreadsheet");
788 st->blend_read_after_liblink =
nullptr;
WorkSpace * CTX_wm_workspace(const bContext *C)
ScrArea * CTX_wm_area(const bContext *C)
Depsgraph * CTX_data_depsgraph_pointer(const bContext *C)
Object * CTX_data_active_object(const bContext *C)
SpaceSpreadsheet * CTX_wm_space_spreadsheet(const bContext *C)
void BKE_spacetype_register(std::unique_ptr< SpaceType > st)
ARegion * BKE_area_region_new()
ARegion * BKE_area_find_region_type(const ScrArea *area, int region_type)
void BKE_viewer_path_copy(ViewerPath *dst, const ViewerPath *src)
@ VIEWER_PATH_EQUAL_FLAG_CONSIDER_UI_NAME
void BKE_viewer_path_clear(ViewerPath *viewer_path)
IDViewerPathElem * BKE_viewer_path_elem_new_id()
bool BKE_viewer_path_equal(const ViewerPath *a, const ViewerPath *b, ViewerPathEqualFlag flag=ViewerPathEqualFlag(0))
void BLF_size(int fontid, float size)
float BLF_width(int fontid, const char *str, size_t str_len, ResultBLF *r_info=nullptr) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE void BLI_listbase_clear(ListBase *lb)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_addhead(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
size_t BLI_str_format_int_grouped(char dst[BLI_STR_FORMAT_INT32_GROUPED_SIZE], int num) ATTR_NONNULL(1)
#define BLI_STR_FORMAT_INT32_GROUPED_SIZE
char * STRNCPY(char(&dst)[N], const char *src)
#define SET_FLAG_FROM_TEST(value, test, flag)
#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_read_struct_list(reader, struct_name, list)
#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)
T * DEG_get_evaluated(const Depsgraph *depsgraph, T *id)
@ SPREADSHEET_TABLE_ID_TYPE_GEOMETRY
@ SPREADSHEET_COLUMN_FLAG_UNAVAILABLE
@ SPREADSHEET_FILTER_ENABLE
eSpaceSpreadsheet_ObjectEvalState
@ SPREADSHEET_OBJECT_EVAL_STATE_VIEWER_NODE
@ SPREADSHEET_OBJECT_EVAL_STATE_EVALUATED
@ SPREADSHEET_OBJECT_EVAL_STATE_ORIGINAL
eSpreadsheetColumnValueType
#define SPREADSHEET_WIDTH_UNIT
@ SPREADSHEET_FLAG_PINNED
@ V2D_SCROLL_HORIZONTAL_HIDE
@ V2D_SCROLL_VERTICAL_HIDE
@ VIEWER_PATH_ELEM_TYPE_ID
void ED_area_tag_redraw(ScrArea *area)
void ED_region_panels(const bContext *C, ARegion *region)
void ED_region_header(const bContext *C, ARegion *region)
void ED_region_header_init(ARegion *region)
void ED_region_panels_layout(const bContext *C, ARegion *region)
void ED_region_panels_init(wmWindowManager *wm, ARegion *region)
void ED_region_tag_redraw(ARegion *region)
void ED_region_panels_draw(const bContext *C, ARegion *region)
Read Guarded memory(de)allocation.
#define UI_SIDEBAR_PANEL_WIDTH
uiBlock * UI_block_begin(const bContext *C, ARegion *region, std::string name, blender::ui::EmbossType emboss)
const uiStyle * UI_style_get_dpi()
void UI_block_draw(const bContext *C, uiBlock *block)
void UI_panel_category_active_set_default(ARegion *region, const char *idname)
void UI_block_end(const bContext *C, uiBlock *block)
void UI_block_align_end(uiBlock *block)
uiLayout * UI_block_layout(uiBlock *block, int dir, int type, int x, int y, int size, int em, int padding, const uiStyle *style)
void uiLayoutSetAlignment(uiLayout *layout, char alignment)
void uiItemSpacer(uiLayout *layout)
void UI_block_layout_resolve(uiBlock *block, int *r_x, int *r_y)
void UI_ThemeClearColor(int colorid)
void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy)
#define ND_SPACE_SPREADSHEET
BMesh const char void * data
BPy_StructRNA * depsgraph
T * add(std::unique_ptr< T > resource)
bool contains(const Key &key) const
void append(const T &value)
void insert(const int64_t insert_index, const T &value)
Span< T > as_span() const
StringRefNull name() const
eSpreadsheetColumnValueType type() const
float fit_column_width_px(const std::optional< int64_t > &max_sample_size=std::nullopt) const
virtual void foreach_default_column_ids(FunctionRef< void(const SpreadsheetColumnID &, bool is_extra)>) const
virtual std::unique_ptr< ColumnValues > get_column_values(const SpreadsheetColumnID &) const
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)
SpreadsheetColumn * spreadsheet_column_new(SpreadsheetColumnID *column_id)
static void spreadsheet_header_region_free(ARegion *)
static void spreadsheet_foreach_id(SpaceLink *space_link, LibraryForeachIDData *data)
static void spreadsheet_free(SpaceLink *sl)
const SpreadsheetTableID * get_active_table_id(const SpaceSpreadsheet &sspreadsheet)
void spreadsheet_table_move_to_front(SpaceSpreadsheet &sspreadsheet, SpreadsheetTable &table)
void spreadsheet_operatortypes()
static void spreadsheet_header_region_init(wmWindowManager *, ARegion *region)
void spreadsheet_table_blend_write(BlendWriter *writer, const SpreadsheetTable *table)
IndexMask spreadsheet_filter_rows(const SpaceSpreadsheet &sspreadsheet, const SpreadsheetLayout &spreadsheet_layout, const DataSource &data_source, ResourceScope &scope)
void draw_spreadsheet_in_region(const bContext *C, ARegion *region, const SpreadsheetDrawer &drawer)
void spreadsheet_table_blend_read(BlendDataReader *reader, SpreadsheetTable *table)
SpreadsheetRowFilter * spreadsheet_row_filter_copy(const SpreadsheetRowFilter *src_row_filter)
static void spreadsheet_footer_region_free(ARegion *)
static void spreadsheet_right_region_free(ARegion *)
static SpaceLink * spreadsheet_create(const ScrArea *, const Scene *)
static void spreadsheet_sidebar_init(wmWindowManager *wm, ARegion *region)
static void spreadsheet_keymap(wmKeyConfig *keyconf)
static void update_visible_columns(SpreadsheetTable &table, DataSource &data_source)
static void spreadsheet_init(wmWindowManager *, ScrArea *area)
void spreadsheet_table_remove_unused(SpaceSpreadsheet &sspreadsheet)
void spreadsheet_table_id_free_content(SpreadsheetTableID *table_id)
std::unique_ptr< DataSource > data_source_from_geometry(const bContext *C, Object *object_eval)
static SpaceLink * spreadsheet_duplicate(SpaceLink *sl)
SpreadsheetTableID * spreadsheet_table_id_copy(const SpreadsheetTableID &src_table_id)
void spreadsheet_table_id_copy_content_geometry(SpreadsheetTableIDGeometry &dst, const SpreadsheetTableIDGeometry &src)
static void spreadsheet_main_region_draw(const bContext *C, ARegion *region)
void spreadsheet_table_id_blend_write_content_geometry(BlendWriter *writer, const SpreadsheetTableIDGeometry *table_id)
std::unique_ptr< DataSource > get_data_source(const bContext &C)
static void spreadsheet_main_region_init(wmWindowManager *wm, ARegion *region)
void spreadsheet_table_id_blend_read(BlendDataReader *reader, SpreadsheetTableID *table_id)
void spreadsheet_table_remove_unused_columns(SpreadsheetTable &table)
void spreadsheet_table_id_foreach_id(SpreadsheetTableID &table_id, LibraryForeachIDData *data)
static void spreadsheet_footer_region_draw(const bContext *C, ARegion *region)
Object * spreadsheet_get_object_eval(const SpaceSpreadsheet *sspreadsheet, const Depsgraph *depsgraph)
SpreadsheetTable * spreadsheet_table_new(SpreadsheetTableID *table_id)
ID * get_current_id(const SpaceSpreadsheet *sspreadsheet)
static void spreadsheet_footer_region_init(wmWindowManager *, ARegion *region)
SpreadsheetColumn * find_hovered_column_header(SpaceSpreadsheet &sspreadsheet, ARegion ®ion, const int2 &cursor_re)
static void spreadsheet_footer_region_listener(const wmRegionListenerParams *)
std::unique_ptr< SpreadsheetDrawer > spreadsheet_drawer_from_layout(const SpreadsheetLayout &spreadsheet_layout)
static void view_active_object(const bContext *C, SpaceSpreadsheet *sspreadsheet)
static void spreadsheet_dataset_region_listener(const wmRegionListenerParams *params)
void spreadsheet_table_free(SpreadsheetTable *table)
static void spreadsheet_blend_read_data(BlendDataReader *reader, SpaceLink *sl)
static void spreadsheet_header_region_draw(const bContext *C, ARegion *region)
static int get_index_column_width(const int tot_rows)
void spreadsheet_row_filter_free(SpreadsheetRowFilter *row_filter)
static void spreadsheet_blend_write(BlendWriter *writer, SpaceLink *sl)
static void spreadsheet_update_context(const bContext *C)
void spreadsheet_table_foreach_id(SpreadsheetTable &table, LibraryForeachIDData *data)
SpreadsheetColumn * find_hovered_column_header_edge(SpaceSpreadsheet &sspreadsheet, ARegion ®ion, const int2 &cursor_re)
void spreadsheet_column_assign_runtime_data(SpreadsheetColumn *column, const eSpreadsheetColumnValueType data_type, const StringRefNull display_name)
void spreadsheet_data_set_region_panels_register(ARegionType ®ion_type)
SpreadsheetTable * get_active_table(SpaceSpreadsheet &sspreadsheet)
static void spreadsheet_header_region_listener(const wmRegionListenerParams *params)
static void spreadsheet_cursor(wmWindow *win, ScrArea *area, ARegion *region)
SpreadsheetColumnID * spreadsheet_column_id_copy(const SpreadsheetColumnID *src_column_id)
SpreadsheetTable * spreadsheet_table_copy(const SpreadsheetTable &src_table)
void spreadsheet_table_remap_id(SpreadsheetTable &table, const bke::id::IDRemapper &mappings)
void register_spacetype()
static void spreadsheet_dataset_region_draw(const bContext *C, ARegion *region)
void register_row_filter_panels(ARegionType ®ion_type)
void spreadsheet_table_id_remap_id(SpreadsheetTableID &table_id, const bke::id::IDRemapper &mappings)
SpreadsheetTable * spreadsheet_table_find(SpaceSpreadsheet &sspreadsheet, const SpreadsheetTableID &table_id)
static void spreadsheet_id_remap(ScrArea *, SpaceLink *slink, const blender::bke::id::IDRemapper &mappings)
void spreadsheet_table_add(SpaceSpreadsheet &sspreadsheet, SpreadsheetTable *table)
static void spreadsheet_main_region_listener(const wmRegionListenerParams *params)
static void spreadsheet_right_region_listener(const wmRegionListenerParams *)
Object * parse_object_only(const ViewerPath &viewer_path)
std::optional< ViewerPathForGeometryNodesViewer > parse_geometry_nodes_viewer(const ViewerPath &viewer_path)
bool exists_geometry_nodes_viewer(const ViewerPathForGeometryNodesViewer &parsed_viewer_path)
VecBase< int32_t, 2 > int2
void(* cursor)(wmWindow *win, ScrArea *area, ARegion *region)
void(* listener)(const wmRegionListenerParams *params)
void(* draw)(const bContext *C, ARegion *region)
void(* layout)(const bContext *C, ARegion *region)
void(* init)(wmWindowManager *wm, ARegion *region)
ARegionRuntimeHandle * runtime
SpreadsheetTableIDGeometry geometry_id
SpreadsheetTable ** tables
SpaceSpreadsheet_Runtime * runtime
uint8_t object_eval_state
SpreadsheetColumn ** columns
uint32_t column_use_clock
Vector< ColumnLayout > columns
void label(blender::StringRef name, int icon)
struct wmEvent * eventstate
void WM_cursor_set(wmWindow *win, int curs)
wmEventHandler_Keymap * WM_event_add_keymap_handler(ListBase *handlers, wmKeyMap *keymap)
wmKeyMap * WM_keymap_ensure(wmKeyConfig *keyconf, const char *idname, int spaceid, int regionid)