109 MEM_delete(sspreadsheet->
runtime);
124 if (sspreadsheet->
runtime ==
nullptr) {
125 sspreadsheet->
runtime = MEM_new<SpaceSpreadsheet_Runtime>(__func__);
133 if (sspreadsheet_old->
runtime) {
134 sspreadsheet_new->
runtime = MEM_new<SpaceSpreadsheet_Runtime>(__func__,
138 sspreadsheet_new->
runtime = MEM_new<SpaceSpreadsheet_Runtime>(__func__);
231 id_elem->
id = &ob->
id;
248 if (context_object ==
nullptr) {
258 if (active_object != context_object) {
272 const std::optional<ViewerPathForGeometryNodesViewer> parsed_path =
275 if (parsed_path.has_value()) {
289 const std::optional<ViewerPathForGeometryNodesViewer> workspace_parsed_path =
291 if (workspace_parsed_path.has_value()) {
318 if (used_id ==
nullptr) {
322 if (id_type !=
ID_OB) {
339 if (object_eval ==
nullptr) {
372 if (!active_table_id) {
382 return std::to_string(std::max(0, tot_rows - 1)).size() *
BLF_width(fontid,
"0", 1) +
391 if (handled_columns.
add(*column->id)) {
394 new_columns.
append(column);
400 if (handled_columns.
contains(column_id)) {
410 new_columns.
insert(0, column);
413 new_columns.
append(column);
415 handled_columns.
add(*column->
id);
426 if (clock_was_reset || column->is_available()) {
448 data_source = std::make_unique<DataSource>();
480 const int tot_rows = data_source->tot_rows();
486 std::unique_ptr<ColumnValues> values_ptr = data_source->get_column_values(*column->id);
493 if (column->width <= 0.0f || column_type != column->data_type) {
497 spreadsheet_layout.
columns.append({values, width_in_pixels});
499 column->runtime->left_x =
x;
500 x += width_in_pixels;
501 column->runtime->right_x =
x;
507 *sspreadsheet, spreadsheet_layout, *data_source, scope);
645 std::stringstream ss;
646 ss <<
IFACE_(
"Rows:") <<
" ";
650 ss << visible_rows_str <<
" / ";
654 ss << tot_rows_str <<
" | " <<
IFACE_(
"Columns:") <<
" " << runtime->
tot_columns;
655 std::string stats_str = ss.str();
672 layout.
label(stats_str, ICON_NONE);
729 sspreadsheet->
runtime =
nullptr;
736 reader, sspreadsheet->
num_tables,
reinterpret_cast<void **
>(&sspreadsheet->
tables));
782 std::unique_ptr<SpaceType> st = std::make_unique<SpaceType>();
797 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
#define STRNCPY_UTF8(dst, 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)
@ RGN_FLAG_INDICATE_OVERFLOW
@ 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)
void ED_region_draw_overflow_indication(const ScrArea *area, ARegion *region, rcti *mask=nullptr)
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)
void UI_ThemeClearColor(int colorid)
void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy)
void UI_view2d_mask_from_win(const View2D *v2d, rcti *r_mask)
#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)
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
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)
int2 block_layout_resolve(uiBlock *block)
uiLayout & block_layout(uiBlock *block, LayoutDirection direction, LayoutType type, int x, int y, int size, int em, int padding, const uiStyle *style)
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 alignment_set(blender::ui::LayoutAlign alignment)
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)